【发布时间】:2018-01-24 07:30:02
【问题描述】:
我有一个 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++ 项目中编译的,如何使用预处理器检查?
【问题讨论】:
-
AFAIK,XCode 根据文件后缀确定语言,而不是根据项目类型。
-
您可以在the File Inspector's "Type" dropdown中更改编译模式。这是每个项目的设置。
-
@JoshCaswell 谢谢。在“类型”的文件检查器中,我将“默认 - C++ 源代码”更改为“Objective-C++ 源代码”并且它有效。
标签: c++ objective-c macros c-preprocessor objective-c++