メインコンテンツ

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

MISRA C:2012 Rule 5.4

Macro identifiers shall be distinct

説明

ルール定義

Macro identifiers shall be distinct 1 .

根拠

マクロ識別子の名前は他のマクロ識別子およびそのパラメーターと別個でなければなりません。

Polyspace 実装

このチェッカーは、最初の 63 文字が同じである 2 つのマクロが、異なる値で定義されている場合に違反を報告します。同じマクロが異なる値を使って定義されているが、そのマクロの中間が未定義である場合は、このチェッカーは違反を報告しません。

63 文字のカットオフは C99 に基づく解析に適用されます。C90 では、カットオフは 31 文字です。つまり、チェッカーは、最初の 31 文字に違いがなければ、2 つのマクロは実質的に同じであると見なします。C90 ルール チェックを使用するには、オプション [C 標準バージョン] (-c-version) で値 c90 を使用します。比較する文字数は、オプション -code-behavior-specifications を使用して変更できます。-code-behavior-specifications を参照してください。

トラブルシューティング

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

すべて展開する


#define engine_exhaust_gas_temperature_raw egt_r
#define engine_exhaust_gas_temperature_scaled egt_s   /* Non-compliant */

#define engine_exhaust_gas_temp_raw egt_r
#define engine_exhaust_gas_temp_scaled egt_s          /* Compliant */

この例では、マクロ engine_exhaust_gas_temperature_scaled egt_s の最初の 31 文字が、先行するマクロ engine_exhaust_gas_temperature_scaled の文字と同じです。


#define engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw egt_r
#define engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw_scaled egt_s /* Non-compliant */

/* 63 significant case-sensitive characters in macro identifiers */
#define new_engine_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw egt_r
#define new_engine_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_scaled egt_s /* Compliant */

この例では、マクロ engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx___gaz_scaled の最初の 63 文字が、先行するマクロ engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx___raw の文字と同じです。

チェック情報

グループ: 識別子
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2014b で導入

すべて展開する


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.