C and C++


LANG.STRUCT.CGEN.MND : Missing Non-default Association in C Generic

要旨

The association list for a C generic selection expression contains only a default association.

Generic selection is not useful in this case, because the default association is always used.

プロパティ

クラス名 Missing Non-default Association in C Generic
日本語クラス名 Missing Non-default Association in C Generic
クラス分類 冗長性 (redundancy)
ニーモニック LANG.STRUCT.CGEN.MND
カテゴリー
MisraC2023 MisraC2023:23.3 A generic selection should contain at least one non-default association
Misra2012 Misra2012:23.3 A generic selection should contain at least one non-default association
対応言語 C のみ利用可能です。 C++ は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Missing Non-default Association in C Generic"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#define MND_DEFAULT_ONLY(y) (_Generic(y, default: 2000))  /* this could be expressed more clearly as
                                                           * #define MND_DEFAULT_ONLY(y) 2000
                                                           */
#define MND_DEFAULT_AND_NONDEFAULT(y) (_Generic(y, int: 5, float: 6, default: 2000))
#define MND_NONDEFAULT_ONLY(y) (_Generic(y, int: 5, float:6))

int lang_struct_cgen_mnd(void){
    int rv = 10;
    rv += MND_DEFAULT_ONLY(20); /* 'Missing Non-default Association in C Generic' warning issued here */
    rv += MND_DEFAULT_AND_NONDEFAULT(20);                                  /* ok */
    rv += MND_NONDEFAULT_ONLY(20);                                         /* ok */
    return rv;
}

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

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