[C言語]casehack.cワロタwww

twitterのTLに流れてきたリンク

http://pastebin.com/EY3WQNzC

casehack.cではswitch-case文の面白い手法を紹介している。

上記のサンプルコードをコンパイルし、実行すると

こちらが出力される、というもの。

ちょっと意味がわからないwww

 

流れを追っかけるためにprintfをcase:0の処理に注入。

この状態で実行する

これが出力されました。

case 0: 内部の1行目のコードが実行されていないことがわかります。

以下が流れ

1.switch(2)なので case 2:のブロックが実行される

2.case 2:の最後にある } (中括弧)に対応しているfor文の頭に戻る。

3.switch-case文に入る前から i は5なので、あとはそのままi++されながら10になるまでループ

これによって、

この箇所が4回繰り返される。

 

goto文のスコープを限定した局所的なものが、switch-case文って感じなのかな??

これ使い道があるかは別として、面白かったので手元で再現してみました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です