相等性的预处理器测试总是计算为true
Preprocessor test for equality always evaluates true
使用此:
-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
当您在预处理器中使用==
时,一个不是#define
d的字母标记将被0
替换。因此,这将测试#if 0 == 0
,这是真的,因此将显示您的错误。
现在,看看:
#if ME==NOTSOGREAT
代币更换后为:
#if AWESOME==NOTSOGREAT
这再次等同于#if 0 == 0
,这是真的。
如果在此之前您也有#define AWESOME 5
,那么您会发现第一个测试是真的,但第二个测试是假的。
我猜您正在尝试检测ME
是否已定义为AWESOME
,但没有办法做到这一点;您只能测试ME
是否被定义为与AWESOME
定义的内容相等的内容。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- GetAsyncKeyState(VK_RETURN) 错误地计算为 true
- (a==1)&&(a==2)&&(a==3) 的计算结果为 true 吗?(它有用吗?
- "if"条件的计算结果始终为 "true"
- if 语句在应该计算 TRUE 时不计算 TRUE
- 而循环在为假时计算为 true C++
- 仅在线程休眠时计算为 true
- 为什么这个 while 循环永远不会计算为 true
- Qt 编译错误:endl 将始终计算为 true
- ifstream.eof() 在 C++ 中未计算为 true
- 相等性的预处理器测试总是计算为true
- Address将始终计算为true error
- Static_assert总是计算true (avr, g++)