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();
}
Данная диагностика классифицируется как:
|