【问题标题】:Xcode 7.3: "Ambiguous expansion of macro" when re-defining macro in prefix fileXcode 7.3:在前缀文件中重新定义宏时“宏的模糊扩展”
【发布时间】:2016-07-08 17:10:39
【问题描述】:

我正在使用 Xcode 7.3,对于在 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”宏的行上显示“宏 'assert' 的模糊扩展”警告。 “扩展'assert'的这个定义”指向系统头的定义,而不是我的重新定义。 “'assert' 的其他定义”指向我的前缀文件中的定义。

禁用模块时不会出现此警告。

【问题讨论】:

标签: ios xcode macros clang compiler-warnings


【解决方案1】:

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

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

【讨论】:

  • 将预编译前缀头设置为 NO 并不能解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多