如何解决MISRA 2012规则10.4报出的操作数本质类型不匹配错误?
问题原因
MISRA C 2012 规则10.4明确要求:相等运算符和关系运算符的左右操作数必须为相同本质类型的表达式。你遇到报错的核心原因是:C语言中未加后缀的整型字面量0默认本质类型为有符号int,而左操作数usart[RS485_PORT].tx_count是无符号类型,二者本质类型不匹配,因此触发合规校验失败。
解决方案
仅需将右操作数的字面量修改为无符号类型即可,有两种合规的实现方式:
- 最简方案:给字面量
0添加无符号后缀U,修改后的代码如下:if(usart[RS485_PORT].tx_count == 0U) // 符合MISRA 10.4要求 - 若
tx_count是定宽无符号类型(如uint8_t/uint16_t/uint32_t),也可使用对应类型的显式强制转换,匹配精度更高:// 示例:tx_count为uint16_t类型时的写法 if(usart[RS485_PORT].tx_count == (uint16_t)0)
补充说明
所有无符号变量与整型常量做相等、大小比较的场景,都需要给常量添加U后缀或做对应无符号类型的显式转换,避免后续重复触发同类型合规报错。
内容的提问来源于stack exchange,提问作者Sharon Deborah
相关产品推荐
相关产品推荐

