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

この記事では、C言語のswitch文のcaseでbreak文を書かない場合の動作について解説します。

また、fall-throughという概念についても紹介します。

具体的な利用例や注意点も説明するので、C言語の初心者の方でも理解しやすい内容となっています。

目次から探す

break文を書かない場合の動作

break文を書かない場合、switch文のcaseブロックが実行された後、次のcaseブロックも実行されます。

つまり、break文がない場合、switch文は fall-through と呼ばれる動作をします。

以下に例を示します。


#include <stdio.h>
int main() {
    int num = 2;
    switch (num) {
        case 1:
            printf("1が選択されました。\n");
        case 2:
            printf("2が選択されました。\n");
        case 3:
            printf("3が選択されました。\n");
        default:
            printf("デフォルトの処理が実行されました。\n");
    }
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

2が選択されました。
3が選択されました。
デフォルトの処理が実行されました。

numの値が2であるため、case 2のブロックが実行されます。

しかし、break文がないため、次のcase 3のブロックも実行されます。

さらに、break文がないため、defaultのブロックも実行されます。

このように、break文を書かないと、意図しない動作が発生する可能性があります。

そのため、switch文の各caseブロックの最後には、必ずbreak文を書くことが重要です。

fall-throughとは

fall-throughとは、switch文のcase文でbreak文を書かずに次のcase文に進むことを指します。

通常、switch文のcase文では、該当するcaseが実行された後にbreak文を書くことで、switch文から抜け出すようになっています。

しかし、fall-throughでは、break文を書かずに次のcase文に進むため、複数のcase文が連続して実行されることがあります。

fall-throughの利用例

以下に、fall-throughの利用例を示します。


#include <stdio.h>
int main() {
    int num = 2;
    switch (num) {
        case 1:
            printf("1が選択されました。\n");
        case 2:
            printf("2が選択されました。\n");
        case 3:
            printf("3が選択されました。\n");
        default:
            printf("その他が選択されました。\n");
    }
    return 0;
}

上記のコードでは、変数numの値が2の場合、2が選択されましたと表示されます。

しかし、break文が書かれていないため、次のcase文に進み、3が選択されましたと表示されます。

さらに、break文がないため、defaultの部分も実行され、その他が選択されましたと表示されます。

fall-throughを意図的に利用する場合の例とそのメリットの説明

fall-throughを意図的に利用する場合の例として、曜日によって異なる処理を行うプログラムを考えてみましょう。


#include <stdio.h>
int main() {
    int day = 3;
    switch (day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("平日です。\n");
            break;
        case 6:
        case 7:
            printf("週末です。\n");
            break;
        default:
            printf("無効な値です。\n");
    }
    return 0;
}

上記のコードでは、変数dayの値によって平日か週末かを判定し、それに応じたメッセージを表示しています。

平日の場合はcase 1からcase 5までの範囲で処理を行い、週末の場合はcase 6とcase 7で処理を行います。

このように、fall-throughを利用することで、複数のcase文で同じ処理を行うことができます。

fall-throughのメリットとしては、同じ処理を複数のcase文で行う場合に、冗長なコードを避けることができる点です。

例えば、平日と週末で同じ処理を行う場合、fall-throughを利用することで、平日のcase文と週末のcase文で同じ処理を書く必要がありません。

fall-throughの注意点

fall-throughを利用する際には、注意点もあります。

まず、意図せずにfall-throughが発生しないように注意する必要があります。

break文を書くことで、switch文から抜け出すことができますが、break文を忘れると、次のcase文に進んでしまうため、予期しない結果になる可能性があります。

また、fall-throughを利用する場合でも、必要に応じてコメントを追加することで、他の開発者が意図を理解しやすくすることが重要です。

特に、複雑な処理や大規模なプログラムでは、fall-throughの使用箇所を明示的にコメントすることで、可読性を向上させることができます。

以上が、switch文のcaseでbreak文を書かない場合の動作についての解説です。

fall-throughを利用することで、冗長なコードを避けつつ、効率的なプログラムを作成することができますが、注意して扱いましょう。

目次から探す