我已经定义了一个结构如下:
struct Display7
{
U8 a : 1;
U8 b : 1;
U8 c : 1;
U8 d : 1;
U8 e : 1;
U8 f : 1;
U8 g : 1;
}Display7;
如果我在Keil IDE中禁用严格ANSI C检查,则没有错误。 如果启用严格ANSI C,我会收到错误“位字段的非标准类型”。 是什么导致了这个问题? 如果我将每个struct元素设置为U32,则ANSI C不会抱怨。
答案 0 :(得分:5)
6.7.2.1结构和联合说明符:5 /位字段应具有合格或不合格的类型 版本
_Bool
,signed int
,unsigned int
或其他 实现定义的类型。它是实现定义的 允许原子类型。
答案 1 :(得分:2)
C99中可选择使用除了有符号或无符号int
或_Bool
以外的其他类型的位字段。