【问题标题】:Why doesn't LLVM compile typedeffed C blocks in pch file with Xcode?为什么 LLVM 不使用 Xcode 编译 pch 文件中的类型化 C 块?
【发布时间】:2014-08-29 10:32:13
【问题描述】:

我在项目的 PCH 文件中键入了一个我常用的 C 块类型:

typedef void (^UserBlock)(PFUser* user);

当我尝试在这样的标头中定义一个 Objective C 方法时:

+(void)ensureUserWithID:(NSString *)userID withCompletion:(UserBlock)completionHandler

我在UserBlock 上收到Expected a type 错误。但是,如果我将 typedef 从 PCH 移动到该头文件的开头,它会编译(带有警告 Redefinition of typedef 'UserBlock' is a C11 feature。我已经清理了构建文件夹,删除了派生数据,重新启动了 Xcode,但我仍然得到同样的错误.我的PCH中也有其他定义,他们只是编译文件。我遇到的所有问题是我的PCH中定义的C块类型。为什么我会遇到这种行为?我在Xcode 5.1.1和LLVM 5.1。

【问题讨论】:

  • 我不明白为什么那行不通。你能显示整个前缀文件吗?
  • @trojanfoe pastebin.com/m5WLMcsS(只是暂时注释掉了这行,很明显没有正常注释掉)
  • 如果将typedefs 移到#ifdef __OBJC__ 块内会发生什么?
  • @trojanfoe 没有任何变化。顺便说一句,我在我的应用程序的其他任何地方都使用了这些块类型。这只是我遇到这种奇怪行为的一个地方。
  • @trojanfoe 发现了问题。这是我的错,看我的回答。

标签: c xcode llvm objective-c-blocks llvm-clang


【解决方案1】:

发现问题。我遇到错误的头文件被导入到 PCH 文件中, typedefs 之前。我已经将 typedefs 移到 header 导入上方,问题就消失了。

【讨论】:

  • 很高兴看到我又遇到了完全相同的问题,用谷歌搜索,找到了我自己的问题和答案:)
猜你喜欢
  • 2011-08-08
  • 2014-12-14
  • 2018-05-26
  • 2011-06-17
  • 2014-09-26
  • 2014-03-05
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多