塊[C語言擴展]

塊[C語言擴展]
更多義項 ▼ 收起列表 ▲

塊(blocks)是由LLVM提出的類似於lambda表達式的非標準C語言擴展,亦可以套用於Objective-C與C++中。它的語法類似於這些函式中的閉包,即由大括弧包括的語句塊。蘋果設計塊的一個目的是使設計基於Grand Central Dispatch執行緒結構的程式更容易 ,但塊是獨立於這一構架的,它也可以在其它程式中以與普通語句塊十分相似的方式套用。蘋果已經在蘋果修改版的GCC編譯器以及Clang LLVM編譯器前端中實現了這一特性;同時,LLVM計畫,包括了支持塊特性的運行時庫。與函式定義類似,塊可以有參數,也可以在其內部聲明私有變數。與普通的C函式定義不同,塊可以使用其上文中定義的變數。一個塊定義會產生一個不透明的值,該值同時包括了塊內代碼的引用和定義時棧內局部變數的快照(而非調用時)。塊可以在定義後被調用,其行為與函式指針相同。塊可以如同函式指針一般被賦值到變數中,作為函式的參數傳遞,但若塊需要在其被定義的範圍之外被使用時,程式設計師(或API)需要將該塊用特別的運算符(Block_copy)標記。在定義塊之後,塊內的代碼可以在任何時間被調用,語法與調用函式相同。

示例

一個簡單的計數器的例子:

編譯

Linux:

與GCC嵌套函式的關係

塊在外表上與GCC的C擴展語句塊內的嵌套函式相似 。然而,嵌套函式與塊不同,在退出當前語句塊後就不能被調用了。

C語言標準

塊特性已經被提交到C標準委員會,作為C1x標準的一系列提案 。

相關詞條

熱門詞條

聯絡我們