我需要帮助理解下面代码中两个的替换

I need help understanding the replacement of TWO in the below code

我 运行 通过 Code::Blocks 它显示了最终答案 1。然后如何在“ i = i-2*TWO” 语句中替换 TWO,为什么会这样?

该代码是我正在尝试的家庭作业的一部分 solve/understand:

#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; 
    }

自己替换就好了。

i = i - 2 * TWO;

i = i - 2 * ONE + ONE;

所以你有

i = 2 - 2 * 1 + 1;

所以我的值为 1。

如果你想得到等于-2的结果,那么重写宏

#define  TWO    ( ONE + ONE )

您可以通过 运行 gcc -E <filename.c> 查看编译器将什么视为最终表达式。这应该有助于理解为什么结果是 1.