有符号整型对象的位域长度不应为 1
6.9.3 ID_singleSignedBitfield
有符号整型对象的位域长度如果为 1 表示只有一个比特位,而该比特位是符号位,极易造成意料之外的错误。
匿名成员的位域长度不受本规则限制。
示例:
struct X {
signed a: 1; // Non-compliant
signed : 0; // Compliant
signed : 1; // Compliant
signed b: 2; // Compliant
unsigned c: 1; // Compliant
};
int main() {
X x;
x.a = 1, x.b = 1, x.c = 1;
printf("%d %d %u\n", x.a, x.b, x.c); // What is output?
}
输出 -1 1 1,x.b 和 x.c 为 1 与预期相符,x.a 预期是 1,但实际是 -1。
参考
MISRA C 2012 6.2
MISRA C++ 2008 9-6-4