gpt4 book ai didi

c++ - 相等性的预处理器测试总是评估为真

转载 作者:太空狗 更新时间:2023-10-29 20:12:36 25 4
gpt4 key购买 nike

使用这个:

-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。 token 替换将 ME 更改为 AWESOME,因此该行的最终版本为:

#if AWESOME==AWESOME

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

现在,看看:

#if ME==NOTSOGREAT

token 替换后是:

#if AWESOME==NOTSOGREAT

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


如果您在此之前还有#define AWESOME 5,那么您会发现第一个测试为真,而第二个测试为假。

我猜你正试图检测 ME 是否被定义为 AWESOME 但没有办法做到这一点;您只能测试 ME 是否被定义为与 AWESOME 被定义为相同的东西。

关于c++ - 相等性的预处理器测试总是评估为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com