Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2639. MISRA. Default association...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2639. MISRA. Default association should appear as either the first or the last association of a generic selection.

04 Апр 2025

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

Данная диагностика классифицируется как:

  • MISRA-C-23.8