Blanktar

  1. top
  2. blog
  3. 2013
  4. 02

C言語でfor i inをしたい

メモです、小ネタです、てゆかネタです。

危険ですのであんまり真似しないでください。何が危険って、可読性がやばいです、読めないです。

#include <stdio.h>

#define PUT(var)    printf("%s = %d\n", #var, var)

#define RANGE(var, start, end) \
int(##var) = start; var != end; var += (start < end ? 1 : -1)

int main()
{
    for(RANGE(a, 0, 10))
        PUT(a);

    for(RANGE(b, 0, -10))
        PUT(b);

    int end = 10;
    for(RANGE(c, 0, end))
    {
        PUT(c);
        if(c > 5)
            end = 0;
    }

    return 0;
}

上二つは普通にカウントアップとカウントダウン。

最後のは0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0ってなるちょっとアクロバティックな動作。

いやー、キモい。 C言語なのか何なのかよく分からない。 マクロ良くないね。いや、適度な使用は良いんだろうけれど。うかつに使うと可読性が酷いことに。


なお、上記ソースはtccのversion 0.9.25で動作確認しました。gccでやったらめっちゃ怒られました。