1

我有C++ 代码,其中包含:

struct Struct
{
    uint8_t varA : 1;
    uint8_t varB : 1;
    uint8_t varC : 1;
};

当我在其上运行Klocwork 10时,我收到警告:

CWARN.SIGNEDBIT (4:Review) Analyze
Bit field 'varA' has one bit and is signed

此结构中的其他变量也是如此。 uint8_t 是 unsigned char typedef。当我尝试使用签名字符时,我得到一个错误,而不是像这里这样的警告。使用unsigned int可以解决问题,但我想改用char

我的问题是:为什么会出现此警告以及如何解决?

4

3 回答 3

0

KlocWork 可能在这里挑剔。
位域应该是整数类型,而不是字符类型。

尝试将位字段声明为无符号整数。

编译器应该将这些位打包成可以包含所有位的最小数据类型。

检查您的汇编语言列表以查看编译器正在使用的数据类型。

于 2015-01-30T16:59:15.133 回答
0

看起来这是一个 Klocwork 10 错误,我将把它作为一个例外添加到测试输出中。谢谢您的回复

于 2015-02-02T12:00:18.877 回答
0

此问题(FP)已在 Klocwork 2017.1 版本中修复。将 Klocwork 从 v10 升级到 v12 以进行验证。

于 2017-06-29T12:51:19.233 回答