メインコンテンツ

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

MISRA C:2012 Rule 5.1

External identifiers shall be distinct

説明

このチェッカーは、既定の Polyspace® as You Code 解析では非アクティブにされますPolyspace as You Code 解析で非アクティブにされるチェッカー (Polyspace Access)を参照してください

ルール定義

External identifiers shall be distinct 1 .

根拠

外部識別子はグローバル スコープまたはストレージ クラス extern で宣言されています。

2 つの長い名前がほぼ同一で、違いが名前の後半部分のみである場合、それらを間違いやすくなります。コードの可読性は低下します。

Polyspace 実装

Polyspace は最初の 31 文字の間に相違点があれば 2 つの名前を別個であると見なします。C90 では相違点は最初の 6 文字の間に存在しなければなりません。C90 ルール チェックを使用するには、オプション [C 標準バージョン] (-c-version) で値 c90 を使用します。比較する文字数は、オプション -code-behavior-specifications を使用して変更できます。-code-behavior-specifications を参照してください。

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

External %s %s conflicts with the external identifier XX in file YY.

トラブルシューティング

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

すべて展開する


int engine_temperature_raw;
int engine_temperature_scaled;   /* Noncompliant */					
int engin2_temperature;          /* Compliant */	

この例では、識別子 engine_temperature_scaled の最初の 6 文字が、先行する識別子 engine_temperature_raw の文字と同じです。


int engine_exhaust_gas_temperature_raw;
int engine_exhaust_gas_temperature_scaled; /* Noncompliant */					

int eng_exhaust_gas_temp_raw;
int eng_exhaust_gas_temp_scaled;           /* Compliant */						

この例では、識別子 engine_exhaust_gas_temperature_scaled の最初の 31 文字が、先行する識別子 engine_exhaust_gas_temperature_raw の文字と同じです。


/* file1.c */
int abc = 0; /* Noncompliant */

/* file2.c */
int ABC = 0; 

この例では、実装において大文字と小文字を区別しない 6 つの有意文字が "外部識別子" でサポートされています。2 つの翻訳で識別子は異なっていますが、有意文字では区別されません。

チェック情報

グループ: 識別子
カテゴリ: 必要
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.