メインコンテンツ

MISRA C++:2023 Rule 6.2.2

All declarations of a variable or function shall have the same type

R2024b 以降

説明

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

ルール定義

All declarations of a variable or function shall have the same type. 1

根拠

2 つの異なる翻訳単位でのオブジェクトまたは関数の宣言に型の互換性がない場合、その動作は未定義になります。

Polyspace 実装

Polyspace が 2 つの型に互換性があると見なすのは、使用されている環境で、それらの型のサイズと符号属性が同じ場合です。このチェッカーは、次のような未使用のコードでは起動されません。

  • インスタンス化されていないテンプレート

  • 呼び出されない関数 static または extern

  • 呼び出されない未定義のローカル関数

  • 未使用の型および変数

ある翻訳単位で [[noreturn]] 属性をもつ関数を宣言し、別の翻訳単位では [[noreturn]] 属性を使用しない同じ関数を宣言している場合、Polyspace は違反を報告します。

トラブルシューティング

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

すべて展開する

file1.cpp


                  
                  
typedef          char         char_t;
typedef signed   short        int16_t;
typedef signed   long         int64_t;

namespace bar {
	int64_t a;
	int16_t c;  // Noncompliant

};

file2.cpp


                  
                  
typedef          char         char_t;
typedef signed   int          int32_t;

namespace bar {
	extern char_t c;    
	extern int32_t a;
	void foo(void){
		++a;
		++c;
	}
}; 

この例では、変数 bar::cfile2.cpp 内では char として定義され、file1.cpp 内では signed short として定義されています。ターゲット プロセッサ i386 では、これらの型のサイズは等しくありません。Polyspace は、bar::c の定義にフラグを設定します。

変数 bar::a は、file1.cpp では long として定義され、file2.cpp では int として定義されています。ターゲット プロセッサ i386 では、intlong のサイズはどちらも 32 ビットです。両方のファイルでの bar::a の定義には互換性があるため、Polyspace は違反を報告しません。

チェック情報

グループ: Basic Concepts
カテゴリ: Required

バージョン履歴

R2024b で導入


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.