c++ - klocwork CWARN.SIGNEDBIT on unsigned char

标签 c++ char klocwork

我有 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。当我尝试使用 signed char 时出现错误,而不是此处的警告。使用 unsigned int 可以解决问题,但我想改用 char

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

最佳答案

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

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

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

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

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

相关文章:

c++ - 使用 istream (std cin) : prevent "[input] is not recognized as ..." on Windows

c - 检查 strInput 以通知用户输入对于程序来说太大时出错?

c - klocwork & c - 实际使用的源代码行数

C++/g++ cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 *.exe.stackdump

c++ - 使用STL从字符串中删除重复字符

c++ - 可移植代码 - 每个字符的位数

java - 如何从 Java 字符串中删除除某些字符之外的所有字符?

c - 释放非堆内存

c++ - 未实现的纯虚方法问题