MISRA C++:2008 Rule 15-3-7

Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз

Описание

Управляйте определением

Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз.

Объяснение

В операторе try-catch или блоке функциональной попытки, компилятор совпадает с повышенным исключением catch() обработчик. catch(…) обработчик совпадает с любым исключением. Обработчики после всеобъемлющего обработчика в том же операторе try-catch или функциональном блоке попытки проигнорированы компилятором во время процесса обработки исключений и являются недостижимым кодом.

При наличии обработчика после того, как всеобъемлющий обработчик может привести к беспорядку разработчика относительно того, почему определенные намеченные обработчики не выполняются. Аналогично, всеобъемлющий обработчик не может обработать исключение в способе, которым разработчик предназначает, приводя к беспорядку.

Реализация Polyspace

Polyspace® повышения этот дефект каждый раз, когда обработчик появляется после всеобъемлющего обработчика в операторе try-catch или функциональном блоке попытки.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

развернуть все

#include <iostream>
#include <exception>

using namespace std;

int main()
{

	try
	{
		//some code
	} catch(exception& e1) {     //Compliant
	
		//...
	
	} catch(...) {               //Compliant
		
		//...
	
	} catch(exception& e2) {     //Noncompliant
	
		//...
	
	}
	}
	
	return 0;
}

Поскольку catch (exception& e2) обработчик прибывает после catch(…) обработчик, Polyspace отмечает обработчик перед всеобъемлющим обработчиком как несовместимый. Эта проблема может привести к ошибке компиляции.

Проверяйте информацию

Группа: Обработка исключений
Категория: необходимый
Введенный в R2013b