【发布时间】:2014-06-02 04:32:48
【问题描述】:
我正在对我的 C 项目进行代码质量检查,该项目涉及带有位字段的结构。我遇到了一种情况,根据 MISRA C 2004 标准,规则 # 6.4 - 是违规行为,内容如下: “6.4 位字段只能定义为无符号整数或有符号整数类型。” Microsoft 开发人员网络here 上提供的文献断言了这一点。 谁能解释为什么位域成员的数据类型需要有符号或无符号整数?为什么我不允许执行以下操作,即使以下代码编译时不会出现警告:
typedef struct
{
char a: 4;
char b: 4;
char flag: 1;
}MY_STRUCT
【问题讨论】:
-
听起来像是可读性问题。大多数人不希望位域具有
char类型。 -
您是标准委员会的成员。用成熟的标准语言解释当有人写
char x: 9时会发生什么,以及为什么在 CHAR_BIT==8 的实现中。让其他委员会成员相信你的规则比他们的要好得多。不知道你,但对我来说这听起来像是浪费了一个周末。 -
可能是因为
char可以根据系统签名或不签名 -
@n.m.标准的相关部分是 §6.7.2.1 ¶4:指定位域宽度的表达式应为具有不超过该类型对象宽度的非负值的整数常量表达式如果省略了冒号和表达式,则将被指定。 除非
CHAR_BIT至少为 9,否则char x: 9违反此要求。
标签: c structure bit-fields