[英]Preprocessor Directives in C
为什么下面程序的 output 是 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;
从左到右评估为25*5
然后到125
;
要修复它,请将square
定义中的参数用括号括起来,如下所示:
#define square(x) ((x)*(x))
还要注意x
周围的额外括号,以便在将1+2
传递给square
时实现预期的行为。
注意var = 125/square(5);
编译代码时变为var = 125/5*5
。
所以编译器在5*5
之前计算125/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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.