switch文
switch文とは、プログラミング言語において指定した制御式を評価し、多分岐を行う為の制御構文の一つです。
指定された制御式をcase分けし、任意の位置からの命令文を実行することで処理を分岐させます。
ただし、この分岐は指定されたcaseの位置より実行しているに過ぎない為、制御式に該当するケース以降すべての処理が実行されます。
このルールをフォールスルー(fall through)と言い、制御の流れが合流する動作をさせたい場合に便利ですが、バグの温床として問題視されることがあります。
その為、switch文を任意の場所で抜けさせるためにはbreak文を記述する必要があります。
switch文の利用
switch文では制御式とcaseで記述された各値を評価し、該当するcaseより処理を実行します。
switch文にて制御式を評価した際に該当するケースが存在しない場合、defaultに引き続く命令文より開始されます。
もし、defaultが記述されていなければ、何も実行せずにswitch文を抜けます。
switch文は以下の方法で記述します。
構文
switch (制御式) { case 値1: ... 命令文; ... break; case 値2: ... 命令文; ... break; default: ... 命令文; ... break; }
switch文を使用した記述例
// switch文 program in C.
#include <stdio.h>
#include <string.h>
// 評価 一覧
enum Rank { A_PLUS, A, A_MINUS, B_PLUS, B, B_MINUS };
int main(int argc, char *args[])
{
char comment[12]; // コメント
enum Rank rank = B_PLUS; // 評価
// 評価によってコメントを判定します
switch (rank)
{
case A_PLUS: // A+
case A: // A
case A_MINUS: // A-
strncpy(comment, "Graet!!", sizeof(comment));
break;
case B_PLUS: // B+
case B: // B
case B_MINUS: // B-
strncpy(comment, "OK...", sizeof(comment));
break;
default:
break;
}
printf("Rank > %d %s\n", rank, comment);
return 0;
}
上記例ではフォースルーを利用し、複数のケース(A+~A-用とB+~B-用)で同一の処理を実行しております。
実行結果
Rank > 3 OK...