所以我认为编译器必须以某种方式每次使用相同的填充,例如:
如果我对这个假设是正确的,你能否指出我C标准在哪里这么说?是否有任何严格的填充位置规则可以保证此属性?
答案 0 :(得分:0)
C通过offsetof
宏的规范,在草案的this version的第7.17节中锁定了特定结构类型中字段偏移的内容,其中描述了HKCU中所需的宏。 {1}}。
宏是
<stddef.h>
扩展为实现定义的空指针常量;和
NULL
扩展为类型为
offsetof(type, member-designator)
的整数常量表达式,其值为 这是结构成员的偏移量(以字节为单位)(由 member-designator 指定), 从其结构的开头(由 type 指定)。类型和成员指示符 应该是给定的size_t
然后表达式
static type t;
计算为地址常量。 (如果 指定的成员是位字段,行为未定义。)
因为它是常量表达式,所以每次使用特定结构类型都必须使用相同的偏移量(或者这都是完全疯狂的)。 两个不同的结构类型,即使声明相同,也不受此限制,以具有相同的布局。 (例如,如果类型是在不同结构布局编译指示的控制下声明的,那么它们不一定具有相同的布局,但声明看起来表面上相同。{{1}很重要!)