C でクロージャ
gcc 拡張を使うと、関数の中に関数を定義することができる。これを利用する と C でもクロージャが使えることを少し前に知ったが、 loading... ようやく理解できた…気がする。 クロージャとは C 言語のコールバック関数に近いが、引数以外の変数を自身が定義された静的 スコープで解決することが最大の特徴。 …だと理解しています。^^; コーディング例 #include <stdio.h> /* 任意の関数 func を n 回実行するだけのライブラリ関数 */ void dolist(void (*func)(void), int n) { int i; for(i = 0; i < n; i++) { func(); } return; } int main(void) { int level = 0; void lambda(void) { level++; } printf("%d\n", level); dolist(lambda, 1); printf("%d\n", level); dolist(lambda, 2); printf("%d\n", level); dolist(lambda, 3); printf("%d\n", level); return 0; } 結果 0...