【发布时间】:2021-12-10 05:21:37
【问题描述】:
以下 C 代码违反 QAC - MISRA 2012 规则 10.1
sLhsStatesInfo->ucLhsMssgCntr = ((Pack_Array_2[4] & (uint8)0xF0)>>4);
错误消息:“基本有符号”类型(有符号字符)的非负常量表达式正用作此移位运算符 (>>) 的右手操作数。 Misra C:2012 规则 10.1
谁能建议出了什么问题以及如何解决它?
【问题讨论】:
-
您可以尝试
4u使其未签名。 -
坦率地说,MISRA 规则检查器很愚蠢。
-
我同意这是一个愚蠢的规则。但原因如下:stackoverflow.com/a/44132801/421195
-
@paulsm4:这与移位运算符的右侧有什么关系?
-
这是一个工具错误。此表达式中的任何地方都没有带符号的字符。
4本质上是签名类型int。