C and C++


LANG.STRUCT.CGEN.EMPE : Excessive Macro Parameter Evaluation in C Generic

要旨

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

プロパティ

クラス名 Excessive Macro Parameter Evaluation in C Generic
日本語クラス名 Excessive Macro Parameter Evaluation in C Generic
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.CGEN.EMPE
カテゴリー
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="Excessive Macro Parameter Evaluation in C Generic"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

/* 'Excessive Macro Parameter Evaluation in C Generic' warning issued on following line
 * ('Inconsistent Macro Parameter Evaluation in C Generic' warning also issued when enabled)
 */
#define EMPE_ONE(x) _Generic(x, \
                             int:x+x, /* two expansions of x */ \
                             default:x)

#define EMPE_OK1(x) _Generic(x, int:x, default:x)  /* ok: at most one expansion of x per association */
#define EMPE_OK2(x) _Generic(x, int:1, default:0)  /* ok: no expansions of x */
#define EMPE_OK3(x) _Generic(x, int:x, default:0)  /* ok: at most one expansion of x per association
                                                    * ('Inconsistent Macro Parameter Evaluation in C Generic'
                                                    *   warning issued when enabled)
                                                    */

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

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