C言語のswitch文とは?if文との違いと使い分け・実務ポイントまで徹底解説

目次

switch文とは

switch文とは、値に応じて処理を分岐する構文です。

if文が「条件(true/false)」で分岐するのに対して、
switch文は「値そのもの」で分岐します。


初心者さん

if文があるのに、switchって必要なんですか?

エンジニアくん

値ごとに分岐するならswitchの方が読みやすくなるんだよ


C言語文法解説シリーズ

本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。

C言語文法解説シリーズ一覧はこちら

基本構文

C
switch (式) {
    case 値1:
        処理;
        break;
    case 値2:
        処理;
        break;
    default:
        処理;
        break;
}

break文とフォールスルー

switch文では、breakを書かないと次のcaseに処理が流れます(フォールスルー)

C
switch (num) {
    case 1:
        printf("1\n");
    case 2:
        printf("2\n");
}

numが1のとき、出力は👇

C
1
2

意図的にフォールスルーを使う場合

C
switch (num) {
    case 1:
    case 2:
        printf("1または2\n");
        break;
}

複数の値をまとめて扱うときに便利です。


初心者さん

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

エンジニアくん

基本はバグ。でも“意図的に使う”ケースもあるんだ


注意点:case内での変数宣言

case内で変数を宣言する場合は、必ず{}で囲む必要があります


NG例

C
switch (num) {
    case 1:
        int x = 10;
        printf("%d\n", x);
        break;
}

OK例

C
switch (num) {
    case 1: {
        int x = 10;
        printf("%d\n", x);
        break;
    }
}

なぜ必要?

caseは「ラベル」であり、ブロックではないため、
スコープを明確にするために {} が必要になります。


enumとswitchの組み合わせ(実務でよく使う)

switch文は、enumと組み合わせると非常に読みやすくなります。

C
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以上など)
  • 複雑な条件(&&, ||)
  • 柔軟な判定が必要

比較例

C
// 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言語の基本文法をこちらの記事で整理しています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

組み込みソフトエンジニアとして働きながら、
C言語・メモリ・ポインタなどの基礎から実務まで解説しています。

副業・キャリアについても実体験ベースで発信中です。

X(旧Twitter)でも発信しています
👉 Xはこちら

▼まずはここから読むのがおすすめ
C言語文法シリーズ
メモリ領域解説シリーズ

コメント

コメントする


目次