C#のswitch文にbreakが必要な理由
【背景】
switch 文は C 言語ファミリーの構文を引き継いでいて、C/C++ から来ています。
C 言語の switch は
switch (x) {
    case 1:
        printf("1です");
    case 2:
        printf("2です");
}
のように書くと、条件に一致したところから下の case にも流れてしまう
これを フォールスルー(fall-through) と言います。
【なぜフォールスルーがあった?】
- もともと switch はアセンブリ言語のジャンプテーブル的な使い方が想定されていました。
 - break を入れないことで「複数のケースをまとめて処理」できる柔軟性があったんです。
 
例:
switch (x) {
    case 1:
    case 2:
    case 3:
        printf("1〜3のいずれかです");
        break;
}
こうすると 1, 2, 3 どれでも同じ処理ができる。
これを便利だとしたので、フォールスルーが仕様に残りました。
【C# でも同じ仕様にした理由】
- C# は C/C++/Java から来たプログラマーに違和感がないように、switch のフォールスルー仕様を踏襲。
 - case の後に処理を書いたら break を忘れないようにルール化されました。
 - Java も同じ仕組みです。
 
【C# ではフォールスルー禁止の方向に】
ただし C# では フォールスルーを原則禁止 しており:
- case は次の case に勝手に流れないようにコンパイルエラーになります。
 - break か return などで必ずブロックを抜ける必要があります。
 
例外的に:
case 1:
case 2:
    // これは OK(処理なしのフォールスルー)
    Console.WriteLine("1 または 2");
    break;
のように「ラベルだけ渡す」のはOK。
【まとめ】
✅ switch の break は
- フォールスルー防止のため
 - 複数条件でまとめる柔軟性を残すため
 - C 言語の歴史的経緯で生まれた
 
✅ C# は安全にするために
- 意図しないフォールスルーは禁止
 - break 必須
 
という経緯で break が必要になった、というわけです。
訪問数 87 回, 今日の訪問数 1回






ディスカッション
コメント一覧
まだ、コメントがありません