メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 20.11

A macro parameter immediately following a # operator shall not immediately be followed by a ## operator

説明

ルール定義

A macro parameter immediately following a # operator shall not immediately be followed by a ## operator 1 .

根拠

複数の #、複数の ## または ### プリプロセッサ演算子の組み合わせに関連付けられた評価順序は指定されていません。ルール 20.10 は # および ## の使用を推奨しません。# 演算子の結果は文字列リテラルとなります。この結果をその他の前処理トークンに貼り付けても有効なトークンになる可能性は極めて低くなります。

レポート内の追加のメッセージ

The ## preprocessor operator shall not follow a macro parameter following a # preprocessor operator.

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

#define A( x )    #x             /* Compliant */
#define B( x, y ) x ## y         /* Compliant */
#define C( x, y ) #x ## y     /* Non-compliant */

この例では、# および ## 演算子の 3 つの使用方法を示しています。これらのプリプロセッサ演算子を単独で使用できますが (1 行目と 2 行目)、# の後に ## を使用すると準拠しません (3 行目)。

チェック情報

グループ: プリプロセッサ命令
カテゴリ: 必要
AGC カテゴリ: 必要

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.