メインコンテンツ

MISRA C++:2008 Rule 3-2-1

All declarations of an object or function shall have compatible types

説明

ルール定義

All declarations of an object or function shall have compatible types 1

根拠

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

Polyspace 実装

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

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

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

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

  • 未使用の型および変数

トラブルシューティング

ルール違反が想定されるものの、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
カテゴリ: 必要

バージョン履歴

R2013b で導入


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.