メインコンテンツ

MISRA C++:2008 Rule 16-3-2

The # and ## operators should not be used.

説明

ルール定義

The # and ## operators should not be used. 1

根拠

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

Polyspace 実装

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

トラブルシューティング

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

すべて展開する

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

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

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

チェック情報

グループ: Preprocessing Directives
カテゴリ: 推奨

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.