-
StackOverflow 文档
-
C Language 教程
-
位字段
-
为比特场付钱
- 不允许使用位域数组,位域指针和返回位字段的函数。
- 地址运算符(&)不能应用于位字段成员。
- 位字段的数据类型必须足够宽以包含字段的大小。
sizeof()
运算符不能应用于位域。
- 没有办法为隔离的位字段创建一个
typedef
(尽管你可以为包含位字段的结构创建一个 typedef
)。
typedef struct mybitfield
{
unsigned char c1 : 20; /* incorrect, see point 3 */
unsigned char c2 : 4; /* correct */
unsigned char c3 : 1;
unsigned int x[10]: 5; /* incorrect, see point 1 */
} A;
int SomeFunction(void)
{
// Somewhere in the code
A a = { … };
printf("Address of a.c2 is %p\n", &a.c2); /* incorrect, see point 2 */
printf("Size of a.c2 is %zu\n", sizeof(a.c2)); /* incorrect, see point 4 */
}