V2660. MISRA. A function declared with a _Noreturn specifier should not return to its caller.

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Правило актуально только для языка C.

Спецификатор _Noreturn указывает компилятору, что функция не возвращает управление в место вызова ни на каком из путей выполнения. Нарушение этого контракта ведёт к неопределённому поведению (C11, п. 6.7.4.8 и Annex J2).

Пример некорректного кода:

_Noreturn void foo(int x)
{
  if (x != 0)
    abort();
}

В данном примере при равенстве значения параметра x нулю foo вернёт управление вызывающей функции, что противоречит спецификатору _Noreturn.

Корректный код:

_Noreturn void foo(int x)
{
  abort();
}

Данная диагностика классифицируется как:

  • MISRA-C-2011-16.1
  • MISRA-C-2023-16.1