メインコンテンツ

MISRA C++:2008 Rule 15-4-1

If a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids.

説明

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

ルール定義

If a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids. 1

根拠

別のソース ファイル内の異なる例外指定を含む関数を宣言した場合、未定義動作を引き起こす可能性があります。

Polyspace 実装

Polyspace は、別のソース ファイル内にある関数の例外指定が一致しない場合に違反を報告します。

トラブルシューティング

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

すべて展開する

この例では、src1.cpp で、関数 foo()std::bad_alloc 例外を発生させるように指定されています。別のファイル src2.cpp では、おそらく誤って、foo()std::exception を発生させるように指定されています。この不一致によって、関数 bar() 内の未定義動作が引き起こされます。Polyspace がこのルールの違反を報告します。

//src1.cpp
#include<new>
void foo() throw(std::bad_alloc){ //Noncompliant
	try{
	int *p1 = new int[50]; 
	}catch(...){
		//....
		std::bad_alloc e;
		throw e;
	}
}

//src2.cpp
#include<new>
#include<stdexcept>
extern bool condition();
extern void foo() throw(std::exception);
void bar() {
	foo();
	
}

チェック情報

グループ: Exception Handling
カテゴリ: 必要

バージョン履歴

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.