我需要帮助,以了解以下代码中两个的替换

时间:2019-09-30 17:04:57

标签: c macros

我通过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; 
    }

2 个答案:

答案 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。