« WRITING SOLID CODE | トップページ | 関係ないぜ! »

2005年11月17日 (木)

switch文の途中で宣言する

普通に書くとswitch文の途中で変数を宣言することが出来ません。

例えば、以下の文はエラーになります。

switch( ... ) {

  case 1:

    int hoge; // コンパイルエラー
    /* ・・・(略) */
    break;

  default:
   // hogeのスコープはまだ有効

}  // hogeのスコープはここで終了(括弧の終わり)

変数hogeのスコープは有効にもかかわらず、caseラベルが実行されないパターンではhogeが定義されません。コンパイラはエラーとせざるを得ないのです。

どうしてもswitch文で宣言したい場合、以下のようにスコープを限定すれば良いです。

switch( ... ) {

  case 1:

    {

    int hoge; // コンパイル成功

    } // hogeのスコープが終了

理由を考えたら当然ですが、defaultラベルにおける宣言は普通に出来ます。

08:29 午後 C++ |

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/147973/8019350

この記事へのトラックバック一覧です: switch文の途中で宣言する:

コメント

上記で「defaultラベルにおける宣言は可能」とありますが、厳密には「switch文の最後に記したラベルでの宣言は可能」ですよね。

ちなみにgcc(Cコンパイラ)では最後のラベルに記しても他のラベルと同じ理由でNGで、g++(C++コンパイラ)ではコンパイル可能でした。

ご参考まで。

投稿: KatokichiSoft | 2009/09/16 22:32:13

コメント有り難うございます。
なるほど、「defaultを最後書く」という固定観念で「本質」を見落としていたようです。

ちなみに、コメント内容をVisual Studio 2005で実験したところ、GNUコンパイラと結果は同様(Cで不可・C++可)でした。CとC++での規約違いでしょうか・・・。

投稿: konuma | 2009/09/19 12:26:19

コメントを書く