Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Go-Go-Gadg...Error? Смотрим, как ошибаются Go разработчики! - 26.08

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2673. MISRA. An empty throw should only occur within the compound-statement of a catch handler.

30 Июл 2026

Диагностическое правило основано на руководстве 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 (...)
{
}