У меня есть следующий союз, и он работает правильно:
#pragma pack(1)
...
union
{
uint8_t opcode;
struct
{
uint8_t z : 3;
uint8_t y : 3;
uint8_t x : 2;
};
}opcode;
Размер объединения ровно один байт, согласно
printf ("%zu\n", sizeof opcode);
Проблема возникает, когда я пытаюсь сделать объединение из битового поля:
union
{
uint8_t opcode;
struct
{
uint8_t z : 3;
union
{
uint8_t y : 3;
struct
{
uint8_t p : 2;
uint8_t q : 1;
};
}y;
uint8_t x : 2;
};
}opcode;
Результат
printf ("%zu\n", sizeof opcode);
составляет 3 байта. Конечно, я могу обойти это с помощью макросов, но возможно ли это вообще?