C语言扩展
块(Blocks)是由LLVM提出的非标准C语言扩展,可应用于Objective-C与C 中,语法类似于由大括号包裹的闭包。苹果设计该特性旨在简化基于Grand Central Dispatch(GCD)线程结构的程序开发,但块本身独立于GCD架构,也可在其他程序中类似普通语句块使用,其作为GCD任务分发的核心单元通过队列执行代码块实现多线程调度。块支持参数传递、私有变量声明及__block关键字标记的闭包变量捕获,生成包含代码引用和局部变量快照的不透明值。其调用方式与函数指针一致,可通过Block_copy运算符在定义域外保留,外表与GCC的嵌套函数相似但具备跨作用域调用能力。该特性最初由苹果在苹果修改版的GCC编译器以及Clang LLVM编译器前端实现,LLVM计划包括支持块特性的运行时库,并作为C1x标准提案提交至C标准委员会。
示例
一个简单的计数器的例子:
编译
Linux:
关系
块在外表上与GCC的C扩展语句块内的嵌套函数相似。然而,嵌套函数与块不同,在退出当前语句块后就不能被调用了。
C语言标准
块特性已经被提交到C标准委员会,作为C1x标准的一系列提案。
最新修订时间:2025-09-21 04:02
目录
概述
示例
参考资料