C and C++


LANG.STRUCT.SW.MB : break文の欠如

要旨

switch 節が break 文で終了していません。

このクラスは 正しく記述されていないswitch文 の部分集合となります。

switch 文が下記の複数のワーニングを含む場合、 その部分集合のみが表示される可能性があります。

プロパティ

クラス名 Missing break
日本語クラス名 break文の欠如
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.SW.MB
カテゴリー
MisraC2023 MisraC2023:16.3 An unconditional break statement shall terminate every switch-clause
Misra2012 Misra2012:16.3 An unconditional break statement shall terminate every switch-clause
Misra2004 Misra2004:15.2 An unconditional break statement shall terminate every non-empty switch clause
AUTOSARC++14 AUTOSARC++14:M6-4-5 An unconditional throw or break statement shall terminate every non-empty switch-clause.
MisraC++2008 MisraC++2008:6-4-5 An unconditional throw or break statement shall terminate every non-empty switch-clause.
MisraC++2023 MisraC++2023:9.4.2 The structure of a switch statement shall be appropriate
CWE CWE:484 Omitted Break Statement in Switch
CERT-C CERT-C:MSC17-C Finish every set of statements associated with a case label with a break statement
JSF++ JSF++:193 Every non-empty case clause in a switch statement shall be terminated with a break statement.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Missing break"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

int lang_struct_sw_mb(int i){
    int a = i;
    switch (a){                           /* all clauses end with break statement */
        case 1: {/*...*/ break;}
        case 2: {/*...*/ a++; break;}
        default: {/*...*/ break;}
    }  

    switch (a){
        case 1:
          a++;                            /* break statement missing at end of this clause */
        case 3:  {      /* 'Missing break' warning issued here:
                         * the previous clause does not end with a break statement, so
                         * execution will fall through into this one.
                         */
          a++;
          break;
        }
        default:
          a--;          /* 'Missing break' warning issued here:
                         * there is no break statement at the end of this clause, which is
                         * the final clause in the switch statement.
                         */
    }

    return a;
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。