CWARN.SIGNEDBIT
有符号位域仅有一个位
CWARN.SIGNEDBIT 检查器可查找其中有符号位域仅有一个位的实例。
漏洞与风险
有符号位域需要至少两个位,该域的两个可能值为 -1 和 0。虽然可以针对 0 检查 1 位有符号位域,并将其用作布尔标记,但其他算术运算可能产生意外结果。
漏洞代码示例
复制
struct BITS {
int n:1;
};
void foo() {
struct BITS b;
b.n = 1;
if (b.n > 0)
{
...
}
}
Klocwork 标记了第 2 行,该行中已定义 1 位有符号位域。