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

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

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

Спецификатор `_Noreturn` указывает компилятору, что функция не возвращает управление в место вызова ни на каком из путей выполнения\. Нарушение этого контракта ведёт к неопределённому поведению \(C11, п\. [6\.7\.4\.8](https://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf#page=144) и [Annex J2](https://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf#page=580)\)\.

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

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

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

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

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