任何人都可以解释这段代码的输出吗?

时间:2016-07-24 14:22:19

标签: c

#include<stdio.h>  
#define sqr(i) i*i

int main()
{ 
        printf("%d %d", sqr(3), sqr(3+1));  //output 9,7
        return 0;`
}

为什么输出是9,7?   任何人都可以通过步骤解释如何评估7

2 个答案:

答案 0 :(得分:2)

sqr(i) i*i的宏sqr(3+1)将评估为3+1*3+1,即7。将宏的参数放在括号中:

#define sqr(i) (i) * (i)

如果你真的想为此使用宏。

答案 1 :(得分:0)

您正在使用您定义的宏,但定义本身就是一个陷阱:

#define sqr(i) i*i

当你这样做的时候 sqr(3)然后这将被替换并执行 3 * 3 ,结果 9

但这是问题

sqr(3 + 1)将被替换并执行为 3 + 1 * 3 + 1 ,结果 3 + 3 + 1 = 7

因为在传递给宏之前不会解析参数...

相反它只会做一个愚蠢的替换,改变参数 3 + 1 i 的每一个巧合

埃尔戈:

你的宏行为

input    output 

3          9 
3+1        7 
4          16