宏定义
#include<stdio.h>#define SQ(y) (y)*(y)
void main()
{
int a,sq,sq1;
scanf("%d",&a);
sq1=SQ(a+1);
sq=160/sq1;
printf("%d",sq);
}
#include<stdio.h>
#define SQ(y) (y)*(y)
void main()
{
int a,sq,sq1;
scanf("%d",&a);
sq=160/SQ(a+1);
printf("%d",sq);
}
为什么上下两种输出的结构不一样? 本帖最后由 xieglt 于 2020-12-23 10:23 编辑
#define SQ(y)(y)*(y)
sq1=SQ(a+1);
sq=160/sq1;
把 SQ(a+1) 替换成得
sq1 = (a+1) * (a+1)
sq=160/sq1;
而
sq=160/SQ(a+1);
把 SQ(a+1) 替换成得
sq = 160 /(a+1) * (a+1)
所以说这个你为什么会困惑。。。乘除法正常来说从左到右依次计算,第一段先计算了后面的乘法 本帖最后由 jackz007 于 2020-12-23 10:22 编辑
第二个代码有问题,但是,宏定义这样写就没有问题了。
#define SQ(y) ((y)*(y)) 回复的都太棒了,一下就明白了
页:
[1]