switch文とは
switch文とは、値に応じて処理を分岐する構文です。
if文が「条件(true/false)」で分岐するのに対して、
switch文は「値そのもの」で分岐します。
初心者さんif文があるのに、switchって必要なんですか?



値ごとに分岐するならswitchの方が読みやすくなるんだよ
C言語文法解説シリーズ
本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。
C言語文法解説シリーズ一覧はこちら


基本構文
switch (式) {
case 値1:
処理;
break;
case 値2:
処理;
break;
default:
処理;
break;
}break文とフォールスルー
switch文では、breakを書かないと次のcaseに処理が流れます(フォールスルー)。
switch (num) {
case 1:
printf("1\n");
case 2:
printf("2\n");
}numが1のとき、出力は👇
1
2意図的にフォールスルーを使う場合
switch (num) {
case 1:
case 2:
printf("1または2\n");
break;
}複数の値をまとめて扱うときに便利です。



break忘れってバグですよね?



基本はバグ。でも“意図的に使う”ケースもあるんだ
注意点:case内での変数宣言
case内で変数を宣言する場合は、必ず{}で囲む必要があります。
NG例
switch (num) {
case 1:
int x = 10;
printf("%d\n", x);
break;
}OK例
switch (num) {
case 1: {
int x = 10;
printf("%d\n", x);
break;
}
}なぜ必要?
caseは「ラベル」であり、ブロックではないため、
スコープを明確にするために {} が必要になります。
enumとswitchの組み合わせ(実務でよく使う)
switch文は、enumと組み合わせると非常に読みやすくなります。
typedef enum {
MODE_OFF,
MODE_ON,
MODE_ERROR
} Mode;
switch (mode) {
case MODE_OFF:
printf("OFF\n");
break;
case MODE_ON:
printf("ON\n");
break;
case MODE_ERROR:
printf("ERROR\n");
break;
}なぜ良いのか?
- 数値の意味が明確になる
- 保守性が高い
- バグを防ぎやすい



1とか2じゃなくて名前つけた方がいいってことですか?



そう。現場ではほぼenumとセットで使うよ
if文との違いと使い分け
switchが向いているケース
- 値が固定(1,2,3など)
- 分岐が多い
- 可読性を重視したい
ifが向いているケース
- 範囲指定(70以上など)
- 複雑な条件(&&, ||)
- 柔軟な判定が必要
比較例
// ifの方が適している
if (score >= 70) {
printf("合格\n");
}
// switchの方が適している
switch (button) {
case 1:
start();
break;
case 2:
stop();
break;
}if文の使い方についてはこちらの記事で解説しています。


実務での判断基準
- 「値で分岐しているか?」→ YESならswitch
- 「条件で分岐しているか?」→ YESならif
まとめ
- switch文は値による分岐に特化した構文
- break忘れによるフォールスルーに注意
- case内の変数宣言は{}が必要
- enumと組み合わせると強力
- if文との使い分けが重要
この記事が参考になった方へ
制御構文を含むC言語の基本文法をこちらの記事で整理しています。


技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。









コメント