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