#define blockscope switch(0)default: puts("hoge\n"); puts("piyo\n"); blockscope{ puts("foo\n"); puts("bar\n"); if(baz==E_OK) break; puts("baz\n"); } puts("fuga\n");
途中で小さいスコープを作ってbreakで脱出できるコードを書く方法で
switch(0)default:{
というイディオムを聞いた
本の虫: 今まで知らなかったswitch文の仕様
メリット1:書くのは1行だけでよい
for(;;){ }だとケツにbreakを入れる必要があるし、do{ }while(0);も while(0)を書く必要がある。
この書き方なら非常にマクロを書きやすい
メリット2:continueが使えない
switch文なので、当然continueはエラーになってくれる
デメリット:見た目がキモい
まずCの構文に見えないのがキモい。
よく見ると switch(0)の直後に括弧が無いし、括弧の前のdefault:がタイポにしか見えないし、初見だとなんで動くのか10秒くらい思考が止まってしまう。
blog.robertelder.org
switch文のルナティックキモい使い方を集めた百鬼夜行みたいなページを見つけたので、あとで勉強する