c - 静态分析类型字符
问题描述
我的库有以下功能行:
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
如何解决此错误或如何抑制此错误?
解决方案
如果代码与发布的一样,则该工具给出了不正确的诊断。该行中没有隐式提升, c1 = *str1++;
也没有不同的基本类型,两者c1
都是str
“基本字符类型”。
然而,这里还有另一个(imo 更严重的)MISRA 违规。强烈建议不要在同一个表达式中与其他运算符组合++
,特别是在有其他副作用时,例如在这种情况下(参见示例 13.3)。也许这个问题会以某种方式欺骗您的工具以产生错误的诊断。
还有关于复杂表达式和括号等的规则。使代码符合 MISRA-C,如下所示:
c1 = *str1;
c2 = *str2;
str1++;
str2++;
如果在上述修复后该工具仍然在抱怨,那么这是 IAR 静态分析器中的另一个错误。
推荐阅读
- javascript - heroku 和 nodejs 错误(Web 进程在启动后 60 秒内无法绑定到 $PORT)
- google-apps-script - 从 Google 表格的活动单元格中选择一个动态范围并隐藏
- php - 整个站点恢复后网站停止工作,PHP警告:session_start():读取会话数据失败
- html - XPath:跟随兄弟姐妹之后获取下一个
- java - Gradle:Java包名称中不允许使用关键字`cvs`
- git - 如何在 git commit 的最大更改之前插入字符串
- go - 如何以内存安全的方式获取前台应用程序的 pid?
- python - PyDrive“已超过未经身份验证使用的每日限制。继续使用需要注册”尽管已登录并已通过身份验证
- flutter - 找不到小部件键颤动测试
- javascript - 如何修复拒绝在科尔多瓦加载图像?