想象一下由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