こんなcase文も有効らしい

最近、Code Completeの第2版を読んでいたわけですが、以下のようなコードも有効らしいです。

さて、最終的なiの出力が幾つになるか分かりますか?

int i = 3, j = 1;
switch(i) {
  case 1:
    if(j == 0) {
      i += 2;
        break;
  case 3:
      i++;
    }
    break;
}

printf("i = %dn", i);


答えはになります。「」は評価されません。

・・・こんなコード、読めなくてもよいと思います。

Leave a Reply

4 コメント - "こんなcase文も有効らしい"

更新通知を受け取る »
avatar
並び替え:   新しい順 | 古い順 | 最も評価の多い
水無瀬
ゲスト

case や default が、それらを含む最小の switch に結びつけられるラベルつき文(の一部)でしかないことに気づけば読むのは特に難しくないと思う。
これが switch ではなく goto case 3; と書かれていたのなら(コンパイルは通らないが)誰も悩まないよね?
だからといって、こんなコードを書きたいとか書いて良いとは思わないけど。

konuma
ゲスト

結局4以外に解釈する事が難しいけど。
この制御の流れよりこれが警告無しに通るということが驚きだという話。

oku
ゲスト

随分前の記事へのコメントになりますが、はじめまして。
これって、普通に Duff's Device な話ではないんですか?
http://www.catb.org/jargon/html/D/Duffs-device.html
ベテランの C プログラマならよく知っている話だと思います。
# もちろん、自分で書こうとは思いませんが。

konuma
ゲスト

こんばんは。
まず「Duff's Device」って意味が分からなくてそこから調べちゃいました。括弧がcaseをまたいだ形で有名なコードが過去にあったんですね。
初心者に分かりにくいコードは書かないってのは同意。それが例えかなり有効であったとしても。
最近かった「Hacker's Delight」に書かれているようなコードも、私のような新参者には理解(利用)されず、消えていく運命なんだろうなあと。
# 読み物としては非常に面白かったです。コンピュータの歴史を感じました。

wpDiscuz