☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

有符号整型对象的位域长度不应为 1

6.9.3 ID_singleSignedBitfield
目录 › next › previous

有符号整型对象的位域长度如果为 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
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.