【发布时间】:2015-01-22 15:12:52
【问题描述】:
我认为 block 是 Objective-C 的特性。最近我将块添加到一些 C 源文件中,我发现它可以编译。
我很困惑,对于 *.c 文件,编译器(Clang)是否应该将其视为纯 C 文件,为什么它可以允许阻塞?
【问题讨论】:
标签: objective-c c macos clang
我认为 block 是 Objective-C 的特性。最近我将块添加到一些 C 源文件中,我发现它可以编译。
我很困惑,对于 *.c 文件,编译器(Clang)是否应该将其视为纯 C 文件,为什么它可以允许阻塞?
【问题讨论】:
标签: objective-c c macos clang
其实 Clang 引入了块
到 C 以及扩展的 Objective-C、C++ 和 Objective-C++
您可以在overview 中阅读。
当然,使用块会使您的源代码与 C11 标准不兼容,但您知道,只要您的代码仅适用于 Mac OS X...
编辑:块也可以在 GCC 中使用,不知道。
【讨论】:
块的添加方式使其也是 Apple 编译器中的“C”功能。
来自苹果的Blocks Programming Topics
块在 GCC 和 Clang 中可用,与 OS X v10.6 一起提供 Xcode 开发者工具。您可以在 OS X v10.6 及更高版本中使用块, 和 iOS 4.0 及更高版本。块运行时是开源的,可以 在 LLVM 的 compiler-rt 子项目存储库中找到。块也有 已作为 N1370 提交给 C 标准工作组:Apple 的 C 的扩展。由于 Objective-C 和 C++ 都是从 C 派生的, 块设计用于所有三种语言(以及 目标-C++)。语法反映了这一目标。
【讨论】: