“无格式”int 位字段作为带符号 int 位字段处理还是作为无符号 int 位字段处理 (6.7.2, 6.7.2.1)。
作为无符号 int 进行处理。
除 _Bool、带符号 int 和无符号 int 之外其他允许的位字段类型 (6.7.2.1)。
可将位字段声明为任何整型。
位字段是否可以跨存储单元边界 (6.7.2.1)。
位字段不可以跨存储单元边界。
单元中位字段的分配顺序 (6.7.2.1)。
在存储单元中从高阶到低阶分配位字段。
非位字段结构成员的对齐 (6.7.2.1)。除非一个实现编写的二进制数据由另一个实现来读取,否则不会出现任何问题。
类型 |
对齐边界 |
字节对齐 |
---|---|---|
char and _Bool |
字节 |
1 |
short |
半字 |
2 |
int |
字 |
4 |
long -m32 |
字 |
4 |
long -m64 |
双字 |
8 |
float |
字 |
4 |
double -m64 |
双字 |
8 |
double (SPARC) -m32 |
双字 |
8 |
double (x86) -m32 |
双字 |
4 |
long double (SPARC) -m32 |
双字 |
8 |
long double (x86) -m32 |
字 |
4 |
long double -m64 |
四倍长字 |
16 |
pointer -m32 |
字 |
4 |
pointer -m64 |
四倍长字 |
8 |
long long -m64 |
双字 |
8 |
long long (x86) -m32 |
字 |
4 |
long long (SPARC) -m32 |
双字 |
8 |
_Complex float |
字 |
4 |
_Complex double -m64 |
双字 |
8 |
_Complex double (SPARC) -m32 |
双字 |
8 |
_Complex double (x86) -m32 |
双字 |
4 |
_Complex long double -m64 |
四倍长字 |
16 |
_Complex long double (SPARC) -m32 |
四倍长字 |
8 |
_Complex long double (x86) -m32 |
四倍长字 |
4 |
_Imaginary float |
字 |
4 |
_Imaginary double -m64 |
双字 |
8 |
_Imaginary double (x86) -m32 |
双字 |
4 |
_Imaginary (SPARC) -m32 |
双字 |
8 |
_Imaginary long double (SPARC) -m32 |
双字 |
8 |
_Imaginary long double -m64 |
四倍长字 |
16 |
_Imaginary long double (x86) -m32 |
字 |
4 |
与每种枚举类型兼容的整型 (6.7.2.2)。
这是 int。