C and C++


LANG.PREPROC.RECURSIVE : 再帰的なマクロ

要旨

N という名前のマクロがその展開された文中に出現しています。 マクロの定義自身に N が含まれているか、このマクロから展開された別のマクロが N を含んでいるためです。

プロパティ

クラス名 Recursive Macro
日本語クラス名 再帰的なマクロ
クラス分類 スタイル (style)
ニーモニック LANG.PREPROC.RECURSIVE
カテゴリー
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.
CWE CWE:710 Improper Adherence to Coding Standards
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="Recursive Macro"

/* 'Recursive Macro' warning issued on following line */
#define expl(a) \
    ((a)==1 ? 1 : ((a) * expl((a)-1)))
        
/* 'Recursive Macro' warning issued on following line */
#define x (y + 1)
#define y (x + 2)

注:例2のワーニングレポートでは両方のマクロが再帰サイクルの原因となります。 warning description box は CodeSonar が最初に遭遇した呼び出し箇所に表示されます。

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

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