我有這兩種結構: - 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