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

で、出来ちゃった・・・

マクロなのでスコープが効いているのが魅力的。高階関数作りたくなったらひっそり使おう。