DCL41-C. switch 文のなかでは最初の case 句より前で変数宣言しない C 標準、6.8.4.2節、第4パラグラフには次のような規定がある[ISO/IEC 9899:2011]。 switch 文は、制御式の値、スイッチ本体(switch body)と呼ばれる文の中の default ラベルの有無及び case ラベルの値に依存して、スイッチ本体、スイッチ本体の中の文又はスイッチ本体の次の文に制御を移す。 最初の case 文より前に変数の宣言と初期化を行い、case 文の内側でそれを使おうとした場合、変数の有効範囲は switch ブロックの内側になるが初期化が行われず、結果として変数の値は不定なままとなる。 違反コード 次の違反コード例では、switch 文の内側の最初の case ラベルより前に変数を宣言し実行文を記述している。 #include <stdio.h>