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; }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
C言語だと、caseはラベルでしかないからなあ…
こんな最適化テクニックもあるみたいだけど https://ja.wikipedia.org/wiki/Duff%27s_device
なんと、こんなのが動くのか…。
実行結果は何となく想像がつくものの、自分の期待通りのコードをこの流儀で書ける自信がまったく持てない。すっ飛んでますな。。
久々の胸熱ウンコードをありがとう。
7行目for文のiの初期化は使われずにループ条件と更新だけ使ってるような。省略してもOK。 なんか実用に迫られて書いたコードじゃなくて「こんなことも出来ますけどやるなよ!絶対にやるなよ!!」の教材っぽくも見える。
Pastebin.com に載っていたソースなので、仰る通り「こういう書き方もできるけどやるなよ ! 絶対やるなよ !!」っていう意図で投稿されたんだと思います。私も久々に胸が熱くなりましたw
所詮 Cのswitchはgoto文の塊みたいなものさ。forブロックの外から中に飛び込むのは燃える!
コメント投稿には、twitter認証が必要です。
Twitter認証
switch文をこーしてbreakさせない手法を使うのはたまにみる。しかしiの初期化は2回しちゃうのか?