为什么.c文件包含块?

时间:2015-01-22 15:12:53

标签: objective-c c macos clang

我认为block是Objective-C功能。最近我将块添加到一些C源文件中,我发现它只是编译好了。

我感到困惑,对于* .c文件,如果编译器(Clang)认为它是纯C文件,为什么它可以允许阻塞?

2 个答案:

答案 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 ++)。语法反映了这一目标。