C and C++


LANG.PREPROC.UMIF : #if内で未定義マクロの使用

要旨

プリプロセッサの制御表現 #if あるいは #elif ステートメントが #define で定義されるよりも前で使用されています。

プロパティ

クラス名 Undefined Macro in #if
日本語クラス名 #if内で未定義マクロの使用
クラス分類 スタイル (style)
ニーモニック LANG.PREPROC.UMIF
カテゴリー
MisraC2023 MisraC2023:20.9 All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluation
Misra2012 Misra2012:20.9 All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluation
Misra2004 Misra2004:19.11 All macro identifiers in preprocessor directives shall be defined before use, except in #ifdef and #ifndef preprocessor directives and the defined() operator
AUTOSARC++14 AUTOSARC++14:M16-0-7 Undefined macro identifiers shall not be used in #if or #elif pre-processor directives, except as operands to the defined operator.
MisraC++2008 MisraC++2008:16-0-7 Undefined macro identifiers shall not be used in #if or #elif preprocessor directives, except as operands to the defined operator.
MisraC++2023 MisraC++2023:19.1.3 All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd at the point of evaluation
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Undefined Macro in #if"

#define ONE 1
#define TWO 2

#if TWO > ONE                                /* both identifiers are defined macros */
/* ... */
#endif 

#if THREE > ONE /* 'Undefined Macro in #if' warning issued here: THREE not defined. */
/* ... */                                     
#endif

#if FOUR > ONE  /* 'Undefined Macro in #if' warning issued here: FOUR defined, but not until later. */
/* ... */                                     
#endif
#define FOUR 4

#if 2 > 1                                    /* no identifiers */
/* ... */
#endif

static int two=2;
#if two > ONE   /* 'Undefined Macro in #if' warning issued here: two not defined with #define */
/* ... */
#endif

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

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