想象一下由32位,16位和8位成員值組成的結構。成員值的順序是每個成員都在自然邊界上。結構成員對齊 - 是否可以假設沒有填充
struct Foo
{
uint32_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint32_t e;
};
對於Visual C++,成員對齊和填充規則爲documented。 sizeof(Foo)在VC++上,上面的結構可預測爲「12」。
現在,我很確定規則是不應該對填充和對齊做出假設,但實際上,其他操作系統上的其他編譯器是否也會做出類似的保證?
如果不是,GCC上是否有等價的「#pragma pack(1)」?
在C中,'sizeof(Foo)'中的'Foo'沒有聲明。該表達式是一個錯誤(除非'Foo'被定義/在其他地方聲明)。我建議你不要嘗試編寫多語言源文件:缺點比你可能找到的任何專業版都要大得多。 – pmg 2011-06-05 09:28:51
@pmg:Pedantry。 :)'typedef struct Foo {...} Foo;' – Xeo 2011-06-05 09:33:31
我相信'typedef'在C++中是多餘的(因此是一個安全可移除的bug源)。我的觀點仍然是:編寫多語言源文件比它的價值更麻煩。 – pmg 2011-06-05 09:41:59