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

pai*_*ler 2 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; 
    }
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

自己进行替换。

i = i - 2 * TWO;
Run Code Online (Sandbox Code Playgroud)

i = i - 2 * ONE + ONE;
Run Code Online (Sandbox Code Playgroud)

所以你有了

i = 2 - 2 * 1 + 1;
Run Code Online (Sandbox Code Playgroud)

所以我将得到值1。

如果您想获得等于-2的结果,请像这样重写宏

#define  TWO    ( ONE + ONE )
Run Code Online (Sandbox Code Playgroud)

  • @painkiller这就像在数学中一样,因为您没有使用括号。 (5认同)