首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态分析类型字符

静态分析类型字符
EN

Stack Overflow用户
提问于 2020-10-01 17:09:06
回答 1查看 49关注 0票数 0

我的库有以下函数行:

代码语言:javascript
复制
int
lwip_stricmp(const char* str1, const char* str2)
{
  char c1, c2;

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

我的MISRAC2012-Rule-10.3错误如下:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2020-10-01 17:49:08

如果代码与发布的代码相同,则该工具给出的诊断不正确。在c1 = *str1++;行中没有发生隐式提升,也没有不同的基本类型,c1str都是“本质上的字符类型”。

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

还有关于复杂表达式和括号等的规则。像这样使代码符合MISRA-C:

代码语言:javascript
复制
c1 = *str1;
c2 = *str2;
str1++;
str2++;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64152244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档