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

Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch

Описание

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

Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch.

Объяснение

Передача управления в try или catch блокируйтесь при помощи goto или switch оператор приводит к плохо сформированному коду, который затрудняет, чтобы понять. Намеченное поведение такого кода затрудняет, чтобы идентифицировать, и код может привести к неожиданному поведению. Резко ввод в блок обработки исключений может вызвать отказ компиляции в некоторых компиляторах, в то время как другие компиляторы не могут диагностировать проблему. Чтобы улучшить понимание кода и уменьшать неожиданное поведение, постарайтесь не передавать управление в попытку или блок выгоды.

Реализация Polyspace

Polyspace® отмечает goto и switch операторы, которые вскакивают в try или catch блок.

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

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

Примеры

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

#include<cstdint>
void foo ( int32_t input )
{
	if ( input==1 )
	{
		goto Label_1; // Noncompliant
	}
	if ( input==2 )
	{
		goto Label_2; // Noncompliant
	}
	switch ( input ) //Noncompliant
	{
	case 1:
		try
		{
			Label_1:
		case 2: 
			break;
		}
		catch ( ... )
		{
			Label_2:
		case 3: 
			break;
		}
		break;
	default:
		{
			//...
			break;
		}
	}
}

В этом примере, goto и switch операторы используются, чтобы вскочить в try-catch блок. Вскакивание в блок try-catch делает код трудным понять. Резкая передача управления в try блокируйтесь или catch блокируйтесь может привести к отказу компиляции. Polyspace отмечает goto и switch операторы.

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

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