问题描述
我的库具有以下功能行:
int
lwip_stricmp(const char* str1,const char* str2)
{
char c1,c2;
do {
c1 = *str1++;
c2 = *str2++;
...
Implict conversion of '*str1++' from essential type unsigned 8-bit to different or narrover essential type character
Implict conversion of '*str2++' from essential type unsigned 8-bit to different or narrover essential type character
解决方法
如果代码如前所述,则该工具给出了错误的诊断。 c1 = *str1++;
行中没有隐式提升,也没有不同的基本类型,c1
和str
都是“本质上是字符类型”。
但是,这里还有另一个(更严重的是)MISRA违规。强烈建议不要将++
与同一表达式中的其他运算符组合在一起,尤其是这种情况下,还应避免其他副作用(例如,参见13.3)。也许这个问题使您的工具愚蠢地产生了错误的诊断结果。
还有关于复杂表达式和括号等的规则。使代码与MISRA-C兼容,如下所示:
c1 = *str1;
c2 = *str2;
str1++;
str2++;
如果在上述修复后该工具仍在抱怨,那么那是IAR静态分析器中的另一个错误。