繁体   English   中英

相等的预处理程序测试始终评估为true

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM