C and C++


LANG.STRUCT.SW.BOOL : switch式でのブール型の使用

要旨

switch 文の制御式がブール式になっています。

このワーニングクラスは、重要システム向けのC言語ガイドラインMISRA C:2012実質的な型に記載されている概念に基づいています。

プロパティ

クラス名 Boolean switch Expression
日本語クラス名 switch式でのブール型の使用
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.SW.BOOL
カテゴリー
MisraC2023 MisraC2023:16.7 A switch-expression shall not have essentially Boolean type
Misra2012 Misra2012:16.7 A switch-expression shall not have essentially Boolean type
Misra2004 Misra2004:15.4 A switch expression shall not represent a value that is effectively Boolean
AUTOSARC++14 AUTOSARC++14:M6-4-7 The condition of a switch statement shall not have bool type.
MisraC++2008 MisraC++2008:6-4-7 The condition of a switch statement shall not have bool type.
JSF++ JSF++:195 A switch expression will not represent a Boolean value.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Boolean switch Expression"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

int lang_struct_sw_bool(int i, int j){
    int a = 0;
 
    switch (i){                              /* not a Boolean expression */
        case 1: {a +=3; break;}
        default: {a++; break;}
    }

    switch (j==i){         /* 'Boolean switch Expression' warning issued here */
        case 0:  {a += i; break;}
        default: {a++; break;}
    }

    return a;
}

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

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