Xcode 7.3:在前缀文件中重新定义宏时"宏的不明显扩展"

use*_*008 9 macros xcode clang compiler-warnings ios

我正在使用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  
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用以下主要源文件:

    int main() {  
      assert(42);  
      return 0;  
    }  
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后在Xcode中构建.

  • 它显示了源文件中使用"断言"宏的行上的"宏"扩展"断言"警告."扩展'assert'的定义'"指的是系统标题中的定义,而不是我的重新定义."断言'的其他定义"指向我的前缀文件中的定义.

禁用模块时不会发生此警告.

Ric*_*ard 5

这是 Xcode 中的一个错误;如果您能在https://bugreport.apple.com 上提交错误报告并在此处发表评论,我们将不胜感激。您在此期间解决此错误的选项是:

  • 您可以为此宏使用与“assert”不同的名称。
  • 您可以将 GCC_PRECOMPILE_PREFIX_HEADER 构建设置设置为 NO,因为当您已经拥有模块时,PCH 不会提供很多好处。前缀标头仍然有效,只是不会变成 PCH。
  • 您可以关闭模​​块。