#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
答案 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