相等性的预处理器测试总是计算为true

Preprocessor test for equality always evaluates true

本文关键字:计算 true 测试 处理器 预处理      更新时间:2023-10-16

使用此:

-DME=AWESOME

这个:

#if ME==AWESOME
#error Im awesome!
#endif

得出以下结果:

寄存器.cpp:59:2:error:#error我太棒了!

但是这个:

#if ME==NOTSOGREAT
#error Im confused!
#endif

得出以下结果:

寄存器.cpp:59:2:error:#error我很困惑!

注意,执行-DME=AWESOME相当于以开头的源文件

#define ME AWESOME

现在让我们来看一下#if ME==AWESOME。令牌替换将ME更改为AWESOME,因此该行的最终版本为:

#if AWESOME==AWESOME

当您在预处理器中使用==时,一个不是#defined的字母标记将被0替换。因此,这将测试#if 0 == 0,这是真的,因此将显示您的错误。

现在,看看:

#if ME==NOTSOGREAT

代币更换后为:

#if AWESOME==NOTSOGREAT

这再次等同于#if 0 == 0,这是真的。


如果在此之前您也有#define AWESOME 5,那么您会发现第一个测试是真的,但第二个测试是假的。

我猜您正在尝试检测ME是否已定义为AWESOME,但没有办法做到这一点;您只能测试ME是否被定义为与AWESOME定义的内容相等的内容。