Oracle Solaris Studio 12.2:C 用户指南

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

字节 

short

半字 

int

字 

long -m32

字 

long -m64

双字 

long long -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

long long -m64

双字 

float

字 

double -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

double -m64

双字 

long double -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

long double -m64

四倍长字 

16 

pointer -m32

字 

pointer -m64

四倍长字 

float _Complex

字 

double _Complex -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

double _Complex -m64

双字 

long double _Complex -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

long double _Complex -m64

四倍长字 

16 

float _Imaginary

字 

double _Imaginary -m32

双字 (SPARC)  

字 (x86) 

8 (SPARC)  

4 (x86) 

double _Imaginary -m64

双字 

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