c – 相等的预处理程序测试始终计算为true
发布时间:2020-12-16 09:55:00 所属栏目:百科 来源:网络整理
导读:使用这个: -DME=AWESOME 还有这个: #if ME==AWESOME#error Im awesome!#endif 得出这个: Registers.cpp:59:2: error: #error Im awesome! 但是这个: #if ME==NOTSOGREAT#error Im confused!#endif 得出这个: Registers.cpp:59:2: error: #error Im conf
使用这个:
-DME=AWESOME 还有这个: #if ME==AWESOME #error Im awesome! #endif 得出这个:
但是这个: #if ME==NOTSOGREAT #error Im confused! #endif 得出这个:
解决方法
请注意,执行-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,那么你会发现第一个测试是真的,但第二个测试是假的. 我猜你是在试图检测我是否被定义为AWESOME但是没有办法做到这一点;你只能测试ME是否被定义为与AWESOME被定义为相同的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |