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

Данное диагностическое правило основано на руководстве [MISRA](https://misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

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

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

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

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

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