V2639. MISRA. Default association should appear as either the first or the last association of a generic selection.
Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для языка С.
Ассоциация по умолчанию (объявленная с ключевым словом default
) в конструкции _Generic
(С11) должна располагаться первой или последней в списке ассоциаций. Такая структура упрощает понимание кода другими программистами.
Рассмотрим пример:
#define abs(Y)( _Generic( (Y) \
, long : labs \
, default : abs \
, long long: llabs)(Y))
long foo(long x)
{
return abs(x);
}
Ассоциация default
располагается между двумя другими: int
и char
. Такой порядок списка ассоциаций усложняет конструкцию _Generic
.
Исправленный код:
// First option
#define abs(Y)(_Generic( (Y) \
, default : abs \
, long : labs \
, long long: llabs)(Y))
// Second option
#define abs(Y)( _Generic( (Y) \
, long : labs \
, long long: llabs \
, default : abs)(Y))
long foo(long x)
{
return abs(x);
}
Данная диагностика классифицируется как:
|