<分区>
当我运行以下代码时,返回值为 11,但我期望它返回 25。有人可以解释一下吗?
#include<stdio.h>
#define SQR(a) a*a
int main()
{
int i=3;
printf("%d",SQR(i+2));
return 1;
}
<分区>
当我运行以下代码时,返回值为 11,但我期望它返回 25。有人可以解释一下吗?
#include<stdio.h>
#define SQR(a) a*a
int main()
{
int i=3;
printf("%d",SQR(i+2));
return 1;
}
最佳答案
需要更多的括号。这:
#define SQR(a) a*a
扩展为:
i+2*i+2
即:
3+2*3+2
这是 11,因为 *
优先于 +
。
你需要像这样定义你的宏:
#define SQR(a) ((a)*(a))
确保这种事情不会发生。
关于c - 为什么返回值不是我在这个带有宏的 C 程序中所期望的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557321/