[C] switch文の中の変数宣言が失敗

1. 症状

下記のようにswitchブロックの内部で変数宣言をおこなうとコンパイルエラーとなる。

 

1.1. C (cc) の場合のエラー

 

1.2. C++ (g++) の場合のエラー

 

2. 原因

  • C言語の場合、switch文が一つのブロック・スコープであるため、スコープの途中で変数宣言を行うことができない。
  • C++の場合、case文を「jumpラベル」として扱うため、case文に飛ぶ(jumpする)に前に全ての変数の初期化が終わっている必要がある。
    •  

      3. 修正方法

      変数宣言をブロックに内包する。

       

      4. 関連項目

      [Obj-C] Cannot jump from switch statement to this case label