ブロック (C言語拡張)
ブロックの言語ランタイムライブラリサポートはLLVMプロジェクトの一部で利用可能である。クロノスグループはブロック構文をOpenCLのバージョン2.0よりエンキューカーネルに使用している。
関数定義のように、ブロックは引数を持ち、内部でローカル変数を宣言することができる。一方で通常の関数定義とは違い、値は周囲のコンテキストから状況をとることもできる。ブロック定義はブロック内のコードへの参照及びその定義時のローカルのスタック変数の現在のスナップショットが含まれる不透明な値を生成する。ブロックは関数ポインタと同様に呼び出すことができる。
ブロックは変数に割り当てられたり、関数を越えたり、通常の関数ポインタのように使われるが、ブロックの範囲外で定義されたものを使用する際は特殊な演算子(Block_copy)でマークする必要がある。
ブロック値を与えると、ブロック内のコードは関数を呼び出す際と同じ構文を使用して、任意の時点で実行することができる。