加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

得出这个:

Registers.cpp:59:2: error: #error Im awesome!

但是这个:

#if ME==NOTSOGREAT

#error Im confused!

#endif

得出这个:

Registers.cpp:59:2: error: #error Im confused!

解决方法

请注意,执行-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被定义为相同的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读