Pastebin.com で見つけた恐怖のスパゲッティコード。ネタバレするとアレなので出力結果は敢えて書かない。ってかこれでコンパイル通るのが解せぬ。
#include <stdio.h>
int main() {
int i=5;
switch ( 2 ) {
case 0:
for ( i=0; i<10; i++ ) {
case 1:
printf("A i=%d\n",i);
case 2:
printf("B i*i=%d\n",i*i);
};
case 3:
printf("done");
break;
}
return 0;
}
C言語だと、caseはラベルでしかないからなあ…
こんな最適化テクニックもあるみたいだけど https://ja.wikipedia.org/wiki/Duff%27s_device
なんと、こんなのが動くのか…。
実行結果は何となく想像がつくものの、自分の期待通りのコードをこの流儀で書ける自信がまったく持てない。すっ飛んでますな。。
久々の胸熱ウンコードをありがとう。
7行目for文のiの初期化は使われずにループ条件と更新だけ使ってるような。省略してもOK。 なんか実用に迫られて書いたコードじゃなくて「こんなことも出来ますけどやるなよ!絶対にやるなよ!!」の教材っぽくも見える。
Pastebin.com に載っていたソースなので、仰る通り「こういう書き方もできるけどやるなよ ! 絶対やるなよ !!」っていう意図で投稿されたんだと思います。私も久々に胸が熱くなりましたw
所詮 Cのswitchはgoto文の塊みたいなものさ。forブロックの外から中に飛び込むのは燃える!
switch文をこーしてbreakさせない手法を使うのはたまにみる。しかしiの初期化は2回しちゃうのか?