﻿# 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`](https://en.cppreference.com/w/c/language/generic) \(С11\) должна располагаться первой или последней в списке ассоциаций\. Такая структура упрощает понимание кода другими программистами\.

Рассмотрим пример:

```cpp
#define abs(Y)( _Generic( (Y)        \
              , long     : labs     \
              , default  : abs      \
              , long long: llabs)(Y))

long foo(long x)
{
  return abs(x);   
}
```

Ассоциация `default` располагается между двумя другими: `int` и `char`\. Такой порядок списка ассоциаций усложняет конструкцию `_Generic`\.

Исправленный код:

```cpp
// 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);   
}
```