揮発性のメモ2

http://d.hatena.ne.jp/iww/

Cで、breakが使えるスコープを使う

#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文のルナティックキモい使い方を集めた百鬼夜行みたいなページを見つけたので、あとで勉強する