#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();
}
我认为输出应该是 100,但是当我看到结果时我发现输出是 -80。当我将括号作为 #define XXX (ABC-XYZ)
时,我得到的输出为 100,但没有括号时,我得到的输出为 -80。
最佳答案
预处理器是一个愚蠢的野兽。它在纯文本级别上工作,而不考虑它在语义上对代码做了什么。让我们看看它在这种情况下做了什么:
a = XXX * 10;
成为
a = ABC - XYZ * 10;
变成
a = 20 - 10 * 10;
显然,-80
。
可能的意图是
#define XXX (ABC - XYZ)
这就是宏被认为是邪恶的原因之一。
关于c - 为什么 "a"的输出是 -80?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491634/