# V2637. MISRA. A 'noreturn' function should have 'void' return type.

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

Это правило актуально только для С.

Функция, задекларированная со спецификатором `_Noreturn` (C11) или атрибутом `[[noreturn]]` (C23), не должна возвращать управление, так как это приведёт к неопределённому поведению. Следовательно, она не может вернуть никакого значения после её вызова, и её возвращаемый тип должен быть `void`.

Анализатор формирует предупреждение, когда обнаруживает у `noreturn` функции возвращаемый тип, отличный от `void`. Это подозрительный код, который может быть следствием опечатки или ошибки при проектировании.

Пример кода, на который анализатор выдаст предупреждение:

    _Noreturn int sum(int a, int b) // _Noreturn is a typo
    {
      return a + b; // undefined behavior
    }

В синтетическом примере выше спецификатор `_Noreturn` был поставлен по ошибке. Чтобы убрать предупреждение анализатора, достаточно удалить лишний спецификатор:

    int sum(int a, int b)
    {
      return a + b;
    }

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

MISRA-C-2023-17.10