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

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

07 Фев 2025

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