我通过Code :: Blocks运行了它,并向我显示了最终答案1.然后在“ i = i-2 * TWO”语句中替换两个,为什么这样?
代码是我正在尝试解决/理解的家庭作业的一部分:
#include <stdio.h>
#define ONE 1
#define TWO ONE + ONE
int main(void) {
int i = 2;
i = i - 2 * TWO;
printf("%d\n", i);
return 0;
}
答案 0 :(得分:5)
只需自己进行替换即可。
i = i - 2 * TWO;
是
i = i - 2 * ONE + ONE;
所以你有
i = 2 - 2 * 1 + 1;
所以我的值为1。
如果您想获得等于-2的结果,请像这样重写宏
#define TWO ( ONE + ONE )
答案 1 :(得分:2)
通过运行gcc -E <filename.c>
,可以看到编译器将其视为最终表达式。那应该有助于理解为什么结果是1。