メインコンテンツ

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

MISRA C:2012 Dir 4.5

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

説明

命令の定義

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 実装

チェッカーは、上記文字の違いがあるだけで同じスコープ内の識別子にフラグを設定します。

さらに、チェッカーは以下のルールに従います。

  • チェッカーは、doforswitch、および while で始まるマクロ内で定義された識別子を無視します。

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

  • チェッカーは、各翻訳単位、つまり各ソース ファイルとインクルードされたヘッダーを個別にチェックしてから、調査結果をマージして、所定の場所での各違反が一度だけ報告されるようにします。

    • 翻訳単位に宣言と定義の両方が含まれる場合、違反は定義に関連付けられます。

    • 翻訳単位に宣言のみが含まれる場合、違反は宣言に関連付けられます。

    このルールの二次的影響として、2 つの競合する宣言を含むヘッダーが、対応する定義を含む翻訳単位のみにインクルードされる場合、違反は定義に対してのみ表示されます。他の翻訳単位にインクルードされる場合、違反は宣言と定義の両方に対して表示されます。

トラブルシューティング

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

すべて展開する

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

バージョン履歴

R2015b で導入


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.