Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Правило актуально только для C++.
Анализатор обнаружил, что throw-выражение не имеет операнда (проброс активного исключения) и не находится внутри catch-блока. Такой код может являться ошибочным. Нахождение конструкции throw; вне явных синтаксических границ обработчика catch сигнализирует о высокой вероятности дефекта. Если этот код выполнится в тот момент, когда в программе нет активного исключения, это приведёт к вызову std::terminate и аварийному завершению работы программы.
Рассмотрим пример некорректного кода:
try
{
if (ok)
return ....;
throw;
}
catch (...)
{
}
В данном примере throw-выражение исполняется внутри блока try, где ещё нет пойманного исключения. Так как объект исключения для проброса отсутствует, выполнение этого кода приведёт к вызову std::terminate.
Корректный вариант кода:
try
{
if (ok)
return ...;
throw some_exception(....);
}
catch (...)
{
}
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: