【C言語】switch文のcaseでbreak文を書かないとどうなるのか解説

C言語において、switch文の中でcase文にbreak文を書かないとどうなるのかを解説します。

初心者にとっては、この点が理解しづらいこともあるため、サンプルコードを交えてわかりやすく説明していきます。C言語プログラミングを学ぶ上で基本的な知識ですので、ぜひ参考にしてください。

目次

case文とbreak文の役割とは

C言語において、switch文を使うと複数の条件分岐を行うことができます。switch文では、case文で条件を指定し、その条件に合致した場合に実行する処理を記述します。

例えば、以下のようなコードがあった場合、numの値に応じて異なる処理が実行されます。

int num = 2;

switch(num) {
    case 1:
        printf("numは1です。\n");
        break;
    case 2:
        printf("numは2です。\n");
        break;
    case 3:
        printf("numは3です。\n");
        break;
    default:
        printf("該当する数字がありません。\n");
}

上記のコードでは、変数numの値が2であるため、「numは2です。」というメッセージが表示されます。

ここで重要なのが、各case文の最後に書かれているbreak文です。

break文は、その場でswitch文から抜け出す役割を持っています。

つまり、どれか一つのcase文に入ったら、その中で処理を完了したら必ずbreak文を書く必要があります。そうしないと、次のcase文も実行されてしまいます

例えば、以下のようなコードではどうなるか考えてみましょう。

int num = 2;

switch(num) {
    case 1:
        printf("numは1です。\n");
    case 2:
        printf("numは2です。\n");
    case 3:
        printf("numは3です。\n");
    default:
        printf("該当する数字がありません。\n");
}
numは2です。
numは3です。
該当する数字がありません。

この場合、「numは2です。」「numは3です。」「該当する数字がありません。」というメッセージが全て表示されます。これは、最初に入ったcase 2以降もbreak文が書かれていないため、次々と処理が続けられてしまった結果です。

以上からわかるように、C言語ではcase文内でbreak文を書かないと意図しない動作を引き起こしてしまいます。

break文を書かない場合のデバッグの難しさ

break文を書かない場合、プログラムの動作が予想外になることがあります。そのため、デバッグが非常に難しくなります。

例えば、以下のようなswitch文があったとします。

switch (num) {
    case 1:
        printf("1です\n");
    case 2:
        printf("2です\n");
    case 3:
        printf("3です\n");
}

この場合、numが1だった場合は「1です」と表示されます。しかし、break文を書かずに次のcase文に進んでしまうため、「2です」「3です」と続けて表示されてしまいます。

このような場合、どこで問題が起きているのか特定することが非常に困難になります。

何度も実行して出力結果を確認したり、デバッガーを使ってステップ実行しなければならず、時間もかかってしまいます。

そのため、プログラムを書く際は必ずbreak文を忘れずに書くようにしましょう。また、既存のコードを修正する際も注意してください。

そもそもbreak文を省略する必要がある構造にしないようにしましょう。

break文を書かない場合のコードの可読性の低下

break文を書かない場合、コードの可読性が低下することがあります。例えば、以下のようなswitch文があったとします。

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

この場合、numが1の場合には”1″と”2″が出力され、numが2の場合には”2″だけが出力されます。しかし、numが3の場合には”3″だけが出力されることになります。

今回は行数が少ないのでわかりやすいですが、普通はswitch文の各caseにはbreak文がセットになっていることが前提でコードを見ます。

そのため、後でコードを修正する際にも問題を引き起こす可能性があります。

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

switch文を書くときは、このようにcase毎にbreak文を使って書いて、コードの可読性や保守性を下げないようにしましょう。

break文を書かない場合のプログラムの安全性の低下

break文を書かない場合、プログラムの安全性が低下する可能性があります。

例えば、switch文で使用される変数に予期しない値が入力された場合、case文の条件に一致しないまま次のcase文に進んでしまうことがあります。

このような場合、本来実行されるべきでない処理が実行されてしまう可能性があります。

また、複数のcase文で同じ処理を行っている場合、break文を書かないと重複して処理が実行されてしまいます。

これはプログラムの動作に影響を与えるだけでなく、処理速度も低下させる原因となります。

さらに、break文を書かないことでデバッグの難易度も上昇します。どのcase文から抜け出したか分からず、問題箇所を特定することが困難になります。

以上のように、break文はプログラムの安全性や可読性を高めるために必要不可欠です。適切に使用することでプログラムの品質向上につながります。

終わりに

以上、C言語でcase文にbreak文を書かない場合の問題点と代替手段について解説してきました。

プログラムの安全性や可読性を高めるためには、適切な場面でbreak文を使用することが重要です。

また、代替手段としてフラグ変数の使用も考えられますが、これらは使い方によってはコードの複雑化やバグの原因となることもあるので注意しましょう。

目次