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

位域长度不应超过类型长度

6.9.2 ID_exceededBitfield
目录 › next › previous

位域长度超过类型长度易误导维护者,而且也可能是笔误。

C 标准不允许位域长度超过类型长度,但 C++ 标准允许,超过的部分作为“padding bits”不参与数据的存储。

示例:

struct A {
    uint32_t x: 64;    // Non-compliant
} a;

a.x = UINT64_MAX;      // Truncated

例中 x 的位域长度超过了类型长度,但有效位域长度仍为 32,有效位域和声明位域不一致易误导维护者,造成截断或溢出等错误。

如果是为了特殊的对齐,可改用成员占位的方式:

struct A {
    int32_t x;         // Compliant
    int32_t padding;   // Compliant
};

成员 padding 特殊的名称表明它是用于占位的特殊成员,这种方式比位域更有利于维护。

依据

ISO/IEC 9899:1999 6.7.2.1(3) ISO/IEC 9899:2011 6.7.2.1(4) ISO/IEC 14882:2003 9.6(1) ISO/IEC 14882:2011 9.6(1)
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.