C言語でRubyライクなブロックを
マクロでブロック渡せば良いんじゃないかなぁ。
#include <stdio.h> #include <stdlib.h> #define times(n, i, block) for (i = 0; i < n; i++) block int main(void) { int i,j; times(3, i, { printf("outer block : %d\n", i); times(3, j, { printf(" inner block : %d\n", j); }); }); return EXIT_SUCCESS; }
実行結果。
outer block : 0 inner block : 0 inner block : 1 inner block : 2 outer block : 1 inner block : 0 inner block : 1 inner block : 2 outer block : 2 inner block : 0 inner block : 1 inner block : 2
で、出来ちゃった・・・
マクロなのでスコープが効いているのが魅力的。高階関数作りたくなったらひっそり使おう。