- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当通过klocwork分析时,出现以下行
pTxData[index] = ( UINT8_C(0) << UINT8_C(4) );
报错
Operand of bitwise operation has type 'signed char' instead of 'unsigned integer'
我已经通过删除任何 #define
将问题降至最低,并且完全不知道为什么会发生这种情况。
最佳答案
对于那些不知道的人,UINT8_C
是一个 C 标准宏1),用于获取 uint_least8_t
类型的整数常量而不是默认的 int
.
因此UINT8_C(0)
相当于 (uint_least8_t)0
。这将是一个小整数类型。因此,当作为左操作数传递给 <<
时,它会受到整数提升2)的影响。 。升级后,它最终成为类型 int
,相当于只写 0
.
您永远不应该将带符号的操作数与按位运算符一起使用,因此这是错误消息的核心原因。更正后的代码应类似于 0u << 4
。当然,除了自记录代码之外,这段代码对于任何其他东西来说都是毫无意义的。 (当然,将值移至 0 总是无害的。)
使用UINT8_C
在 <<
的右操作数上毫无意义 - 该操作数不参与结果的任何类型提升。如果您需要使用无符号文字只是为了满足编码标准,请使用 4u
。值得注意的是,像 MISRA-C 这样的标准不要求 u
后缀,如果您实际上不需要无符号类型 - 这是工具误报的常见来源。
摘要 - 使用此:
pTxData[index] = 0u << 4;
此外,Klockwork 给出了错误的诊断消息。表达式中的运算符可能都相当于 unsigned char
绝对不是signed char
正如该工具所说。
1) 在 C99 中引入 7.18.4.1 。
关于c - 理解Klocwork按位运算符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54903162/
对于相同的代码库,当执行 klocwork 时,对于两个不同版本的 KW,我们得到的结果有所不同。 例如对于特定文件,KW 9 抛出以下错误: #6325:无限循环“文件路径”代码:INFINITE_
我的代码混合了旧代码的不同部分。 为了保持代码简单,我想删除所有从未使用过的函数。 Klocwork 是工具吗?我该怎么做? 谢谢, 摩西。 最佳答案 您可以使用 -p 或 -pg 选项到 gcc 来
Klocwork 报告错误:- "ABR – Buffer overflow, array index of 'oidsp' may be out of bounds. Array 'oidsp' o
背景 考虑以下代码: template void WriteData(const size_t &offset, const T &data) { if(si
Klocwork 在以下条件行中表示“无符号值与 0 的比较始终为真”: #define MAX_VALUE 8589934592 //2^33 ... uint64_t val = get_val(
我的项目由大量旧代码的点点滴滴组成。 我如何知道实际使用了多少行代码? Klocwork 可以给我这个答案吗?我注意到 Klocwork 保存项目中的行数 (SLOC) - 但它是实际使用的行数 -
我们使用 Klocwork 9.6 进行静态代码分析。 为了执行分析,我们使用命令行工具“kwcheck”命令 我们只想过滤掉一些错误。 例如 (Local) *.cpp:134 UNINIT.STA
我正在尝试运行 kwinject 命令。问题是我的一个 Makefile 编译了一个我不想扫描的目录,那么,有没有办法排除这些文件?我尝试使用 kwinject --ignore-files {dir
我发现 Klocwork 报告的一些问题非常奇怪。例如 - if(NULL == m_pMutex.get()) { Log("found unexpected sharedPtr m_pMu
Klocwork throw resource acquired to 'ofs.open("file.txt", std::ofstream::out)' may be lost here 对于下面
我有 C++ 代码,其中包含: struct Struct { uint8_t varA : 1; uint8_t varB : 1; uint8_t varC : 1; };
代码如下: char path = "/temp/abc"; if (mkfifo(path, S_IRWXU) != -1) { /* Other codes. */ } 对于 if 检查,
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我最近安装了“klocwork”并试图消除现有代码中的错误。显示的错误似乎很简单。 char * _p_ 结尾处没有空值。我已经手动添加了一个空终止符(即使没有必要),但它不会让 Klocwork 满
使用一个简单的例子,Klocwork insight 检测到: namespace po = boost::program_options; po::options_description oArgD
在这篇文章的帮助下, https://support.roguewave.com/documentation/klocwork/en/10-x/cs.nps/ 即使在明确设置安全性之后,我仍然收到 k
我使用 looking for 工具来解决 help detect 错误,这些错误阻止程序作为 64 位代码正常运行。最近,我一直在玩弄 Klocwork 及其自定义跳棋功能,它让我可以使用 XPat
'Klocwork' profiller 在以下代码部分生成错误 ['it.second.name_._M_dataplus._M_p' might be used uninitialized in
我是一名优秀的程序员,十分优秀!