【发布时间】:2021-11-11 22:17:28
【问题描述】:
在一些 C++ 文件中,我发现:
#ifndef UE_WITH_CHEAT_MANAGER
#define UE_WITH_CHEAT_MANAGER (1 && !UE_BUILD_SHIPPING)
#endif
来自 CheatManager.h。
有什么区别:
#ifndef UE_WITH_CHEAT_MANAGER
#define UE_WITH_CHEAT_MANAGER (!UE_BUILD_SHIPPING)
#endif
是为了防止某些特定编译器出现警告吗?
附加信息:
-
UE_BUILD_SHIPPING默认为 0,并设置为 1 用于发布构建(分发给消费者/玩家的构建)。 -
UE_WITH_CHEAT_MANAGER用于从编译中排除部分代码。
(已编辑以回答 cmets 中的请求。)
【问题讨论】:
-
尝试使用
A("frog")看看会发生什么。1 && !B正在寻找数字表达式。(!B)表达式将为非数字类型提供未定义的值。 -
@ThomasMatthews:
!"frog"是有效的,对吧?它正在测试"frog"是否为空指针,但它从来都不是,因此!"frog"的计算结果为0。1 && !"frog"也是如此,所以我在这里看不出两者有什么区别。 -
如果
!和&&运算符重载,它们当然会有所不同。 -
宏是否有用取决于
A的上下文。例如,能够修改一堆测试以从单个宏评估为false可能很有用。 -
您能在简化之前发布来自虚幻引擎的确切代码吗?里面可能有什么相关的东西吗?
标签: c++ c-preprocessor