在可以使用
int
或unsigned int
的表达式中可以使用以下内容:
具有整数类型(
int
或unsigned int
之外的整数类型的对象或表达式,其整数转换等级小于或等于int
和{{ 1}}。类型为
unsigned int
,_Bool
,int
或signed int
的位字段。
第二个要点的目的是什么?
为什么要忽略排名小于unsigned int
的其他类型的整数字段?
这是否意味着我可以做到:
int
但不是:
printf("%d\n", (struct{ _Bool x:1; }){0}.x);
答案 0 :(得分:2)
大概是因为6.7.2.1p5:
位字段的类型应为
_Bool
,signed int
,unsigned int
的合格或不合格版本,或其他一些实现定义的类型。是否允许原子类型由实现定义。
即您还是无法随便创建其他类型的位域。