メインコンテンツ

AUTOSAR C++14 Rule M16-3-2

The # and ## operators should not be used.

説明

ルール定義

The # and ## operators should not be used.

根拠

# および ## プリプロセッサ演算子には指定の実行順序がありません。これらの演算子は、コンパイラごとに異なる実行順序で評価される可能性があります。実行順序の不確かさは、開発者の混乱を招いたり、予期せぬマクロ計算が発生したりする原因となる可能性があります。可能であれば、# および ## プリプロセッサ演算の使用は避けてください。

Polyspace 実装

マクロ定義で # または ## 演算子が使用されている場合、Polyspace ® はこの推奨を提示します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#define STRING(X) { #X }                          //Noncompliant
#define CONCAT(X, Y) {X ## Y}                     //Noncompliant

マクロ STRING(X) では # 演算子が使用されているため、Polyspace は非準拠としてこのマクロにフラグを設定します。

マクロ CONCAT(X, Y) では ## 演算子が使用されているため、Polyspace は非準拠としてこのマクロにフラグを設定します。

チェック情報

グループ: プリプロセッサ命令
カテゴリ: Advisory、Automated

バージョン履歴

R2019a で導入