メインコンテンツ

MISRA C:2023 Dir 4.5

Identifiers in the same name space with overlapping visibility should be typographically unambiguous

R2024a 以降

説明

命令の定義

Identifiers in the same name space with overlapping visibility should be typographically unambiguous 1 .

根拠

ここでの「明確」の意味は、ソース コードが記述されているアルファベットと言語によって異なります。文字列として類似した識別子を使用すると、識別子が紛らわしくなる可能性があります。

ラテン アルファベットを英単語で使用する場合は、少なくとも、識別子を次の要素により区別することは避けてください。

  • 小文字とそれに対応する大文字との交換。

  • アンダースコア文字の有無。

  • 文字 O と数字 0 との交換。

  • 文字 I と数字 1 との交換。

  • 文字 I と文字 l との交換。

  • 文字 S と数字 5 との交換。

  • 文字 Z と数字 2 との交換。

  • 文字 n と文字 h との交換。

  • 文字 B と数字 8 との交換。

  • 2 文字 rn と 1 文字 m との交換。

Polyspace 実装

チェッカーは、上記文字の違いがあるだけで同じスコープ内の識別子にフラグを設定します。Polyspace® は、doforswitch、および while で始まるマクロ内で定義された識別子を無視します。

2 つの識別子がそれぞれ異なるスコープ内にある場合、それらの識別子の使用はあいまいではありません。Polyspace は、それぞれ異なるスコープ内にある識別子に対してこのルールの違反を報告しません。

トラブルシューティング

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

すべて展開する

void func(void) {
	int id1_numval;
	int id1_num_val;  /* Non-compliant */

	int id2_numval;
	int id2_numVal;   /* Non-compliant */

	int id3_lvalue;
	int id3_Ivalue;   /* Non-compliant */

	int id4_xyZ;
	int id4_xy2;      /* Non-compliant */

	int id5_zerO;
	int id5_zer0;     /* Non-compliant */

	int id6_rn;
	int id6_m;        /* Non-compliant */

	int numVal;
}

void foo() {
	int numval;
}

この例では、相互に紛らわしい識別子が使用されているため、ルール違反になっています。それぞれ異なるスコープで宣言されている同様の識別子は、このルールの違反として報告されません。

チェック情報

グループ: Code design
カテゴリ: 推奨
AGC カテゴリ: Readability

バージョン履歴

R2024a で導入


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.