# V2630. MISRA. Bit field should not be declared as a member of a union.

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Это правило актуально только для C.

Поле объединения не должно объявляться как битовое поле. Это связано с тем, что способ хранения битовых полей в пользовательских типах определяется реализацией компилятора. Если два битовых поля с одинаковым типом декларируются друг за другом, компилятор не обязан оптимизировать их расположение в едином блоке памяти. В результате может возникнуть неясность относительно того, к каким битам ранее сохранённого значения будет обращаться битовое поле.

Пример кода, в котором анализатор сгенерирует предупреждения:

    union U1
    {
      int a : 8;     // <=
      int b;
    };

    union U2
    {
      int a : 8;     // <=
      int b : 24;    // <=
    };

Правило не применяется к подобъектам внутри объединения, не являющимися объединениями.

    union U3
    {
      struct
      {
        int a:4;
        int b:4;
      } c;
      int d;
    };

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

MISRA-C-2023-6.3