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

Данное диагностическое правило основано на руководстве [MISRA](https://misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

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

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

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

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

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