switch ステートメント (c)
switch と case のステートメントを使用するとコントロールの複雑な条件付き分岐と操作。本体のステートメントに switch ステートメントの制御を移します。
構文
: 選択ステートメント
(切り替えます。 の 式の ) の ステートメントラベル付きステートメント :
case の 定数式の : の ステートメント既定値 : の ステートメント
case の 定数式を (切り替えます。) の 式 の値と一致するステートメントに移りますを制御します。switch のステートメントは case のインスタンスを含めることができます switch に同じステートメント内の 2 種類のケースの定数は値を持つことはできません。ステートメント本体の実行では選択したステートメントで始まり本体の最後または 中断 のステートメントは制御を本体からまで続行されます。
switch のステートメントは通常次のようになります。:
switch ( 式 )
{
宣言
.
.
.
case の 定数式 :
式がと等しい場合に実行されるステートメント
この定数式の値
.
.
.
中断 ;
既定値 :
式がない場合に実行されるステートメント
定数式をパッケージ化します
}
switch のステートメント内の特殊な場合の処理を終了しswitch のステートメントの最後に分岐する 中断 のステートメントを使用します。 中断 せずにプログラムは 中断 までに実行するステートメントを次の例に従ってまたはステートメントの末尾に達するまで。状況によってはこの継続が望ましいこともあります。
既定 のステートメントは case の 定数式を (切り替えます。 の 式 の値と等しくない ) 実行されます。 既定 のステートメントを省略しcase の一致が見つからなかった場合はswitch 本体のステートメントは何も実行されません。最大で 1 既定 の二つのステートメントがあります。 既定 のステートメントの最後に取得されます必要ではありません ; これは switch のステートメントの本体での場所で使用できます。case または 既定 のラベルは switch ステートメントの中でのみ使用できます。
switch の 式 と case の 定数式 の型はである必要があります。case の各 定数式 の値がステートメント本体に一意である必要があります。
switch のステートメント本体の case と 既定 のラベルが実行されるステートメント本体のどこで起動するか最初のテストでのみが重要です。Switch ステートメントは入れ子にできます。静的変数の場合でもswitch にステートメントを実行する前に初期化されます。
[!メモ]
宣言は switch の本体を構成する複合ステートメントのヘッダーに表示できますが宣言に含まれる初期化は行われません。初期化が含まれている行を回避した本体内の実行可能なステートメントに switch のステートメントは制御を直接。
次の例では switch のステートメントを示しています :
switch( c )
{
case 'A':
capa++;
case 'a':
lettera++;
default :
total++;
}
この例の switch 本体の 3 個の 中断 すべてのステートメントはステートメントが前に次のケースが表示されないため c'A' と等しい実行されます。実行制御は最初のステートメント ()capa++; にコピーされ順序で他の本体に従います。c が 'a' と等しい場合lettera と total がインクリメントされます。c が 'A' または 'a' である total だけインクリメントされます。
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
この例では 中断 のステートメントは switch 本体の各ステートメントに従います。 中断 のステートメントは1 種類のステートメントを実行するとステートメント本体の終了を強制します。i がと等しい – n が 1 だけインクリメントします。ステートメント n++; に従う 中断 によってコントロールは残りのステートメントを回避したステートメント本体から渡します。同様に z だけがインクリメントされます i が 0 と等しい場合; i が 1 と等しい場合p だけがインクリメントされます。最後の 中断 のステートメントはコントロールの複合ステートメントの最後には本体からには一貫性を持たせるために含まれているため厳密ではありません。
単一のステートメントは次のように case の複数のラベルを持つことができます :
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' : hexcvt(c);
この例では 定数式が 'a' と 'f' 間の文字である場合はhexcvt 関数が呼び出されます。
Microsoft 固有の仕様 →
Microsoft C は switch のステートメントのケース値の数を制限しません。数は使用できるメモリの容量によってのみ制限されます。ANSI C では 15 switch のステートメントで 257 以上の case ラベルを実行する必要があります。
Microsoft C の既定値は Microsoft 拡張機能を有効にする必要があります。これらの拡張機能を無効にする /Za コンパイラ オプションを使用します。
終了 Microsoft 固有の仕様→