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