首页 > 解决方案 > 静态分析类型字符

问题描述

我的库有以下功能行:

int
lwip_stricmp(const char* str1, const char* str2)
{
  char c1, c2;

  do {
    c1 = *str1++;
    c2 = *str2++;
...

我有这样的 MISRAC2012-Rule-10.3 错误:

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

如何解决此错误或如何抑制此错误?

标签: cstatic-analysisiarmisra

解决方案


如果代码与发布的一样,则该工具给出了不正确的诊断。该行中没有隐式提升, c1 = *str1++;也没有不同的基本类型,两者c1都是str“基本字符类型”。

然而,这里还有另一个(imo 更严重的)MISRA 违规。强烈建议不要在同一个表达式中与其他运算符组合++,特别是在有其他副作用时,例如在这种情况下(参见示例 13.3)。也许这个问题会以某种方式欺骗您的工具以产生错误的诊断。

还有关于复杂表达式和括号等的规则。使代码符合 MISRA-C,如下所示:

c1 = *str1;
c2 = *str2;
str1++;
str2++;

如果在上述修复后该工具仍然在抱怨,那么这是 IAR 静态分析器中的另一个错误。


推荐阅读