我正在使用
Xcode 7.3,我得到了一个“Ambiguous expansion of macro”警告,对于一个在Foundation中定义的宏,但我在我的前缀文件中未定义和重新定义.我启用了模块.
重现:
>在构建设置中将“启用模块(C和Objective-C)”设置为“是”
>使用以下前缀文件:
#import <Foundation/Foundation.h> #undef assert #define assert(e) NSLog(@"hi") // implementation is not important
>使用以下主要源文件:
int main() { assert(42); return 0; }
>然后在Xcode中构建.
>它显示了在源文件中使用“断言”宏的行上的“宏的扩展’断言’”警告. “扩展’assert’的定义”指向系统标题中的定义,而不是我的重新定义. “断言’的其他定义”指向我的前缀文件中的定义.
禁用模块时不会发生此警告.
解决方法
这是Xcode中的一个错误;如果您可以在
https://bugreport.apple.com提交错误报告并在此处留下错误#,我们将不胜感激.您在此期间解决此错误的选项包括:
>对于此宏,您可以使用与“断言”不同的名称.>您可以将GCC_PRECOMPILE_PREFIX_HEADER构建设置设置为NO,因为当您已有模块时,PCH不会提供很多好处.前缀标题仍然有效,它不会变成PCH.>你可以关闭模块.