gpt4 book ai didi

c++ - Apple LLVM 6.0 预处理器神奇#if defined()

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:13 30 4
gpt4 key购买 nike

我目前正在从事一个有很多依赖关系的项目。它是用带有 C++ 库的 Objective-C 编写的。它使用跨平台代码,并针对库中的不同平台进行条件编译。

在最近的更新之后,我遇到了一个关于预处理器宏的特殊问题

#if defined(DEBUG)
#warning WARNING_1
#elif defined(DEBUG_gibberish)
#warning WARNING_2
#elif defined(SOMETHING)
#warning WARNING_3
#else
#warning WARNING_DEFAULT
#endif

代码。

在这种情况下,DEBUG 宏定义在 Xcode Apple LLVM 6.0 预处理部分

请看图片screenshot

所以基本上问题是 #if defined() 对于这个特定项目没有按预期工作。如果我将相同的代码复制到一些干净的测试项目中,它会按预期工作。

它还有另一个有趣的效果,如果我定义了 DEBUG_gibberish 那么它将被计算而不是 else case。在执行了几次实验后,它似乎总是评估/使用第一个真实条件,然后是第二个真实条件或 #else 如果没有第二个真实条件。

我已经尝试过清理项目、清理派生数据、重启 Xcode、重启我的 mac 甚至巫毒娃娃。

我将不胜感激任何关于为什么会发生这种情况以及如何解决它的想法。

编辑 1:我的主项目中有一个 Xcode 项目层次结构。有问题的库是我主项目中的一个子项目。如果我尝试单独构建它,它工作正常。如果我将它编译为主项目的依赖项,我会遇到这个问题。

最佳答案

好的,我找到问题了。

我在我的项目中使用了一些来自第三方库的头文件来创建我自己的库类的子类。

  1. 我相信 Xcode 给出了警告的复合表示:

    在我的代码中,它在标题预处理后显示 WARNING_1定义了 DEBUG 宏的库。

    然后在预处理相同的 header 后显示 WARNING_DEFAULT在我的项目中,未定义 DEBUG 宏。

    但是这两个警告都显示为好像它们在同一个文件中。

  2. 这样做让我得出结论,预处理器或我的代码有问题。因此,我没有考虑简单的事情,即我的项目和库是单独构建的,而且我的项目不包含所需的宏。

所以最终的解决方案很简单,我必须在我的项目中定义所需的宏,然后编译正常。

关于c++ - Apple LLVM 6.0 预处理器神奇#if defined(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034586/

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