【发布时间】:2014-03-20 11:04:05
【问题描述】:
我有以下联合,它工作正常:
#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 个字节。当然我可以用宏来解决这个问题,但这有可能吗?
【问题讨论】:
标签: c unions bit-fields