E.1.9 结构、联合、枚举和位字段 (G.3.9)
E.1.9.1 (6.3.2.3) A member of a union object is accessed using a member of a different type(使用不同类型的成员访问的联合对象的成员):
访问存储在联合成员中的位模式,并根据访问成员时所用的成员类型解释值。
E.1.9.2 (6.5.2.1) The padding and alignment of members of structures(结构成员的填充和对齐)。
表 E–5 结构成员的填充和对齐类型对齐边界字节对齐
char 和 _Bool字节1
short半字2
int字4
long -m32字4
long -m64双字8
long long -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
long long -m64双字8
float字4
double -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
double -m64双字8
long double -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
long double -m64四倍长字16
pointer -m32字4
pointer -m64四倍长字8
float _Complex字4
double _Complex -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
double _Complex -m64双字8
long double _Complex -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
long double _Complex -m64四倍长字16
float _Imaginary字4
double _Imaginary -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
double _Imaginary -m64双字8
long double _Imaginary -m32双字 (SPARC)
字 (x86)8 (SPARC)
4 (x86)
long double _Imaginary -m64双字16
内部填充结构成员,以便各个元素在适当的边界上对齐。
结构的对齐与其更严格对齐的成员相同。例如,只包含 char 数据的 struct 无对齐限制,而包含用 -m64 编译的 double 数据的 struct 将按 8 字节边界对齐。
E.1.9.3 (6.5.2.1) Whether a plain int bit-field is treated as a signed int bit-field or as an unsigned int bit-field(无格式 int 位字段是视为 signed int 位字段还是视为 unsigned int 位字段处理):
视为 unsigned int。
E.1.9.4 (6.5.2.1) The order of allocation of bit-fields within an int(在 int 中位字段的分配顺序):
在存储单元中从高阶到低阶分配位字段。
E.1.9.5 (6.5.2.1) Whether a bit-field can straddle a storageunit boundary(位字段是否可以跨存储单元边界):
位字段不可以跨存储单元边界。
E.1.9.6 (6.5.2.2) The integer type chosen to represent the values of an enumeration type(选择用来表示枚举类型的值的整型):
这是 int。