# 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