为什么"a"的输出是-80?

Abh*_*eet 2 c side-effects operator-precedence c-preprocessor

#include<stdio.h>
#include<conio.h>
#define ABC 20
#define XYZ 10
#define XXX ABC - XYZ

void main()
{
    int     a;

    a = XXX * 10;

    printf("\n %d \n", a);

    getch();
}
Run Code Online (Sandbox Code Playgroud)

我认为输出应该是100但是当我看到结果时我发现输出为-80.当我把括号作为#define XXX (ABC-XYZ)然后我输出为100但没有括号我输出为-80.

Tho*_*mas 13

预处理器是一个愚蠢的野兽.它在纯文本级别上工作,而不考虑它在语义上对代码所做的事情.让我们看看它在这种情况下的作用:

a = XXX * 10;
Run Code Online (Sandbox Code Playgroud)

a = ABC - XYZ * 10;
Run Code Online (Sandbox Code Playgroud)

变成了

a = 20 - 10 * 10;
Run Code Online (Sandbox Code Playgroud)

显然,这是-80.

可能是什么意思

#define XXX (ABC - XYZ)
Run Code Online (Sandbox Code Playgroud)

这就是为什么宏被认为是邪恶的一个原因.