使用此:
-DME=AWESOME
和此:
#if ME==AWESOME
#error Im awesome!
#endif
得出这个:
Registers.cpp:59:2:错误:#error我真棒!
但是这个:
#if ME==NOTSOGREAT
#error Im confused!
#endif
得出这个:
Registers.cpp:59:2:错误:#error我很困惑!
答案 0 :(得分:7)
请注意,执行-DME=AWESOME
等同于源文件:
#define ME AWESOME
现在让我们看一下#if ME==AWESOME
。令牌替换将ME
更改为AWESOME
,因此此行的最终版本为:
#if AWESOME==AWESOME
在预处理器中使用==
时,#define
d的字母标记将被0
替换为#if 0 == 0
。所以这个测试#if ME==NOTSOGREAT
是真的,所以你的错误会被显示出来。
现在,看看:
#if AWESOME==NOTSOGREAT
更换代币后,它是:
#if 0 == 0
再次等同于#define AWESOME 5
,这是真的。
如果在此之前你也有ME
,那么你会发现第一个测试是真的,但第二个测试是假的。
我猜你试图检测AWESOME
是否已定义为ME
但是没有办法做到这一点;您只能测试AWESOME
是否已定义为与{{1}}定义的内容相同的内容。