gpt4 book ai didi

c++ - 如何使用预处理器检查 Objective-C++ 项目中是否正在编译 cpp 文件?

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

我有一个 C++ 源文件 (.cpp),它在我的两个项目之间共享,一个使用 Objective-C++,另一个仅使用纯 C++。我有该文件的一部分,我需要为 Objective-C++ 项目和普通 C++ 项目使用不同的代码,因此我需要检查项目是否正在使用 Objective-C++ 编译。经过一番搜索,我发现 __OBJC__ 宏可以用来检查文件是否由 Objective-C 编译器编译,所以我尝试了这段代码:

#ifdef __OBJC__
//Objective-C++ specific code here
#else
//Plain C++ specific code here
#endif

问题是 __OBJC__ 宏从未定义过,甚至在 Objective-C++ 项目中也没有。我还注意到 __OBJC__ 宏定义在 Objective-C++ 项目的 .mm 文件中,但不在 .cpp 文件中。

以防万一,我正在使用 Xcode 为 iOS 编译 Objective-C++ 项目,纯 C++ 项目是一个跨平台计算机程序,可以使用 Visual Studio、Xcode 或 GCC 进行编译。

如果我的 .cpp 文件是在 Objective-C++ 项目或普通 C++ 项目中编译的,我如何检查使用预处理器?

最佳答案

问题是默认情况下,Xcode 通过扩展名而不是项目来确定文件类型,所以它认为 .cpp 文件是一个普通的 C++ 文件,即使它是 Objective-C++ 项目的一部分,所以它没有在该文件中定义 __OBJC__ 宏。解决方案是通过右键单击 Xcode 左侧文件列表中的 .cpp 文件来更改编译模式,单击“显示文件检查器”,然后在 Xcode 右侧的“类型”下拉列表中选择“目标” -C++ 源”而不是“默认 - C++ 源”:

enter image description here

这将使 Xcode 认为 .cpp 文件是一个 Objective-C++ 文件,因此它将定义 __OBJC__ 宏。

由于这是针对每个项目的设置,它只对 Objective-C++ 项目有影响,不会改变普通 C++ 项目中的任何内容,因此 #ifdef __OBJC__ 将是一种检查方法该文件正在哪个项目中编译。


感谢 Josh Caswellthis comment 中给了我想法.

关于c++ - 如何使用预处理器检查 Objective-C++ 项目中是否正在编译 cpp 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45708744/

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