C and C++


LANG.STRUCT.CGEN.IMPE : Inconsistent Macro Parameter Expansion in C Generic

要旨

A C generic selection expression for which both of the following are true.

プロパティ

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

/* 'Inconsistent Macro Parameter Expansion in C Generic' warning issued on following line */
#define IMPE_1(x) (_Generic(x, \
                            float32_t:x, /* x evaluated once */ \
                            default:0))  /* x evaluated zero times */

/* 'Inconsistent Macro Parameter Evaluation in C Generic' warning issued on following line
 * ('Excessive Macro Parameter Evaluation in C Generic' warning also issued when enabled)
 */
#define IMPE_2(x) (_Generic(x, \
                            int:x+x,     /* x evaluated twice */ \
                            default:x))  /* x evaluated once */

#define IMPE_OK1(x) (_Generic(x, int:x, default:x+2))     /* ok: x always evaluated once */
#define IMPE_OK2(x) (_Generic(x, int:1, default:0))       /* ok: x always evaluated zero times */
#define IMPE_OK3(x) (_Generic(x, int:x+x, default:x+x+2)) /* ok: x always evaluated twice
                                                           * ('Excessive Macro Parameter Evaluation in C Generic'
                                                           *   warning issued when enabled)
                                                           */

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

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