C and C++


LANG.PREPROC.MACROARG : マクロ実引数内の前処理指令

要旨

マクロの引数が、前処理指令の様なトークンを含んでいます。

プロパティ

クラス名 Preprocessing Directives in Macro Argument
日本語クラス名 マクロ実引数内の前処理指令
クラス分類 スタイル (style)
ニーモニック LANG.PREPROC.MACROARG
カテゴリー
MisraC2023 MisraC2023:20.6 Tokens that look like a preprocessing directive shall not occur within a macro argument
Misra2012 Misra2012:20.6 Tokens that look like a preprocessing directive shall not occur within a macro argument
Misra2004 Misra2004:19.9 Arguments to a function-like macro shall not contain tokens that look like preprocessing directives
AUTOSARC++14 AUTOSARC++14:A16-0-1 The pre-processor shall only be used for unconditional and conditional file inclusion and include guards, and using the following directives: (1) #ifndef, (2) #ifdef, (3) #if, (4) #if defined, (5) #elif, (6) #else, (7) #define, (8) #endif, (9) #include.
  AUTOSARC++14:M16-0-5 Arguments to a function-like macro shall not contain tokens that look like pre-processing directives.
MisraC++2008 MisraC++2008:16-0-5 Arguments to a function-like macro shall not contain tokens that look like preprocessing directives.
MisraC++2023 MisraC++2023:19.3.5 Tokens that look like a preprocessing directive shall not occur within a macro argument
CERT-C CERT-C:PRE32-C Do not use preprocessor directives in invocations of function-like macros
POW10 POW10:8 Limit the use of the preprocessor to file inclusion and simple macros.
JPL JPL:20 Make only very limited use of the C pre-processor.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Preprocessing Directives in Macro Argument"

#define CALL_F(x) (f(x))

int f(int x){return x;}

int myfunc(int i){
    /* 'Preprocessing Directives in Macro Argument' warning issued on following line */
    return CALL_F(
#ifdef MYSYMBOL
        i
#else
        5
#endif
    );
}

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

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