严格的ANSI C - 8位结构元素是否违规?

时间:2016-04-07 07:36:50

标签: c

我已经定义了一个结构如下:

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不会抱怨。

2 个答案:

答案 0 :(得分:5)

标准很清楚:

  

6.7.2.1结构和联合说明符:5 /位字段应具有合格或不合格的类型   版本_Boolsigned intunsigned int或其他   实现定义的类型。它是实现定义的   允许原子类型。

答案 1 :(得分:2)

C99中可选择使用除了有符号或无符号int_Bool以外的其他类型的位字段。