代码如下:
#include <stdio.h>
#define One 1
#define Two One+One
int main()
{
int a=10,b=20,c=0;
c = One + Two*b + a; // 原本想是 1 + 2*20 +10 =51
// but 结果是1 + 1 + 1 * 20 + 10 =32
printf("c:%d\n",c);
}
结果:
c:32
本文探讨了一段C语言代码中预处理器宏定义导致的计算错误。在示例代码中,`One` 和 `Two` 的宏定义使得原本期望的计算`1+2*20+10`变成了`1+1+1*20+10`,导致实际输出`c`的值为32而非预期的51。问题在于宏展开时不进行算术运算,因此需要使用括号来确保正确的计算顺序。
1632

被折叠的 条评论
为什么被折叠?



