AUTOSAR C++14 Rule M16-1-1
The defined pre-processor operator shall only be used in one of the two standard forms
説明
ルール定義
定義されたプリプロセッサ演算子は、2 つの標準形式のいずれかで使用するものとします。
根拠
defined プリプロセッサ演算子は、識別子がマクロとして定義されているかどうかを確認します。C で許容されるこの演算子の 2 つの形式を次に示します。
defined (identifier)defined identifier
上記以外の形式を使用すると、コンパイラが報告しない、無効なコードが生成される可能性があります。たとえば defined 演算子の引数として式を使用する場合、コードは無効です。defined の無効な使用がコンパイラによって報告されない場合、無効なコードの診断が難しくなります。
#if などのプリプロセッサ命令が展開され、defined ステートメントが作成される場合、コードの動作は未定義です。次に例を示します。
#define DEFINED defined #if DEFINED(X)
#if プリプロセッサ命令が展開され、defined 演算が作成されます。ご使用の環境によっては、コードが予期しない方法で動作し、診断が難しいバグにつながる可能性があります。無効なコード、バグ、未定義の動作を回避するには、defined 演算子を使用するときに、許可されている形式のみを使用するようにします。
Polyspace 実装
Polyspace® は、次のような defined 演算子の誤った使用にフラグを設定します。
defined演算子が識別子なしで使用されている。defined演算子がマクロ展開後に位置している。defined演算子が複合式で使用されている。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: プリプロセッサ命令 |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入