我有包含以下内容的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。

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

最佳答案

KlocWork可能在这里采摘。
位字段应该是整数类型,而不是字符类型。

尝试将位字段声明为unsigned int。

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

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

关于c++ - 未签名字符上的klocwork CWARN.SIGNEDBIT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28240462/

10-11 23:10