我有这两种结构: - 1.位字段中联合在结构
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
这种结构具有匿名联合,当我计算该结构的尺寸 - 它出来是12个字节( 4 + 4 + 4)。这可以。
2.
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union u
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
但在32位机器打印该结构的大小的8个字节我DEVC++编译器。我不明白为什么它会是8.
几乎没有关于位域布局的保证。说:32位'无符号'你的'结构'只能有8个字节,如果你的字节超过8位宽。请提供[mcve]。假设8位/字节,“struct”大小可以很好地为16个字节。但这一切都取决于平台。 – Olaf
@Olaf无符号的默认宽度不相关,因为他/她已经手动指定了每个字段的位宽。但我仍然同意,不可能将其打包为只有8个字节。看到编译器生成什么代码将是有趣的。 – jforberg
但是我得到了与OP相同的结果:goo.gl/ASQO6Q – jforberg