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

时间:2016-03-21 23:51:57

标签: ios xcode macros clang compiler-warnings

我正在使用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'的定义'”指的是系统标题中的定义,而不是我的重新定义。 “断言'的其他定义”指向我的前缀文件中的定义。

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

1 个答案:

答案 0 :(得分:4)

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

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