Vol*_*ing 4 c++ objective-c name-clash c-preprocessor
我有一个Objective-C/C++应用程序,它使用C++库提供的功能.
其中一个C++类包含这样的枚举:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
Run Code Online (Sandbox Code Playgroud)
包括(使用#import -if that matters-)带有Objective-C/C++源文件(*.mm)中的上述类声明的头文件将使编译失败,因为预处理器将用术语"替换"为"YES" (BOOL)1"("(BOOL)0"同样为"NO").
有没有办法解决这个问题而不重命名枚举的值?
YES和NO是 Objective-C 中预定义的常量,在objc.h头文件中声明.
您应该能够阻止预处理器扩展"是"和"否"宏.这可以通过在本地完成#undefFING他们.
但从技术上讲,如果您使用语言关键字作为标识符,则可能会遇到麻烦.你不会写一个包含被叫成员的类MAX_PATH,对吗?