C and C++


LANG.STRUCT.CGEN.MPD : Misplaced Default Association in C Generic

要旨

The association list for C generic selection expression includes a default association that is neither the first nor the last association in the list.

プロパティ

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

#define MPD_MID(y) (_Generic(y,        \
                             int: 20,  \
                             default: 200,   /* default is neither first nor last */ \
                             char: 2000))

#define MPD_OK_FIRST(y) (_Generic(y, int: 20, char: 2000, default: 200)) /* ok: default is first */
#define MPD_OK_LAST(y) (_Generic(y, default: 200, int: 20, char: 2000))  /* ok: default is last */
#define MPD_OK_NONE(y) (_Generic(y, int: 20,  char: 2000))               /* ok: no default */

int lang_struct_cgen_mpd(void){
    int rv = 10;
    rv += MPD_MID(20); /* 'Misplaced Default Association in C Generic' warning issued here */
    rv += MPD_OK_FIRST(20);                                              /* ok */
    rv += MPD_OK_LAST(20);                                               /* ok */
    rv += MPD_OK_NONE(20);                                               /* ok */
    return rv;
}

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

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