メインコンテンツ

AUTOSAR C++14 Rule A2-10-6

A class or enumeration name shall not be hidden by a variable, function or enumerator declaration in the same scope

説明

ルール定義

クラス名または列挙名は、同じスコープ内の変数、関数、または列挙子の宣言で隠さないものとします。

根拠

変数、データ メンバー、関数、または列挙子の名前が同じスコープ内のクラスまたは列挙の名前と同じである場合は、後者が隠されます。つまり、その名前のすべての使用が、宣言の順序に関係なく、クラスまたは列挙ではなく、変数、データ メンバー、関数、または列挙子を参照します。隠されたクラスまたは列挙は、誤解されやすく、コンパイル エラーにつながる可能性があります。クラスや列挙を宣言するときに名前を再利用しないでください。

Polyspace 実装

Polyspace® は、同じブロック内のクラスまたは列挙と名前が同じである変数、データ メンバー、関数、または列挙子の宣言にフラグを設定します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

次の例では、AUTOSAR ルール A2-10-6 の Polyspace 実装を示します。

#include <cstdint>
namespace NS1
{
	class G {};
	void G() {}             //Noncompliant
}    
namespace NS2
{
	enum class H { VALUE=0, };
	std::uint8_t H = 17;    //Noncompliant
}
namespace NS3
{
	class J {};
	enum H {                 
		J=0,                 // Noncompliant 
	};
} 
main()
{
	//...
}
 

Polyspace は、以下の宣言にフラグを設定します。

  • 関数 G()。この関数は、同じブロック内で宣言されたクラス G を隠すためです。

  • 変数 H。この変数は、同じブロック内で宣言された列挙 H を隠すためです。

  • 列挙子 J。この列挙子は、同じブロック内で宣言されたクラス J を隠すためです。

チェック情報

グループ: 構文規則
カテゴリ: Required、Automated

バージョン履歴

R2020a で導入