[英]Preprocessor test for equality always evaluates true
使用这个:
-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我很困惑!
请注意,执行-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
被定义为相同的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.