严凯 发表于 2020-12-23 09:43:53

宏定义

#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 09:53:05

本帖最后由 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)

倒戈卸甲 发表于 2020-12-23 09:57:28

所以说这个你为什么会困惑。。。乘除法正常来说从左到右依次计算,第一段先计算了后面的乘法

jackz007 发表于 2020-12-23 10:19:16

本帖最后由 jackz007 于 2020-12-23 10:22 编辑

      第二个代码有问题,但是,宏定义这样写就没有问题了。
#define SQ(y) ((y)*(y))

严凯 发表于 2020-12-23 13:21:24

回复的都太棒了,一下就明白了
页: [1]
查看完整版本: 宏定义