我认为block是Objective-C功能。最近我将块添加到一些C源文件中,我发现它只是编译好了。
我感到困惑,对于* .c文件,如果编译器(Clang)认为它是纯C文件,为什么它可以允许阻塞?
答案 0 :(得分:5)
实际上Clang介绍了块
到C,并且,通过扩展,Objective-C,C ++和Objective-C ++
您可以在overview。
中阅读当然,使用块会使您的源与C11标准不兼容,但是,只要您的代码仅适用于Mac OS X ...
编辑:GCC也提供了块,但不知道。
答案 1 :(得分:2)
以这样的方式添加块:它们也是" C" Apple编译器中的功能。
来自Apple的Blocks Programming Topics
随OS X v10.6一起提供GCC和Clang中的块 Xcode开发人员工具。您可以在OS X v10.6及更高版本中使用块, 和iOS 4.0及更高版本。块运行时是开源的,可以 在LLVM的compiler-rt子项目存储库中找到。块也有 被提交给C标准工作组作为N1370:Apple的 对C的扩展由于Objective-C和C ++都是从C派生的, 块被设计为使用所有三种语言(以及 目标C ++)。语法反映了这一目标。