为什么下面程序的输出是125而不是5?
#include<stdio.h>
#define square(x) x*x
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}
请注意 var = 125/square(5);
成为 var = 125/5*5
当你编译代码时。所以编译器会计算出 125/5
之前 5*5
. 结果是: (125/5)*5 = 125
. 而不是 #define square(x) x*x
,把 #define square(x) (x*x)
.
这是你的代码。
#include<stdio.h>
#define square(x) (x*x)
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}
这一行:
var = 125/square(5);
被扩展成:
var = 125/5*5;
从左到右扩展为 25*5
再到 125
;
要解决这个问题,请在定义的 square
,像这样。
#define square(x) ((x)*(x))
请注意 x
为了实现预期的行为,当如 1+2
被传递到 square
.