首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cert和misra修正

cert和misra修正
EN

Stack Overflow用户
提问于 2022-08-24 07:17:58
回答 1查看 76关注 0票数 1

我需要解决米斯拉相关的问题和证书相关的问题。

代码语言:javascript
复制
uint8_t      globalRegion;
uint8_t      tcc;
uint16_t     paramId;
globalRegion = 9U;

如果删除U,则得到misra赋值错误,说明使用的int值与符号值比较。

globalRegion = 9;

但是如果我添加U,我得到的是错误STRONG.TYPE.ASSIGN.CONST --一个值'9U‘被赋值给类型为'uint8_t’的强类型变量'globalRegion‘

代码语言:javascript
复制
globalRegion = 9U;

如果被键入将得到另一个错误,则表达式的porting.cast.size转换为可能不兼容的类型。

代码语言:javascript
复制
globalRegion = ((unit8_t)9U);

如何在没有任何新错误的情况下解决此错误

EN

回答 1

Stack Overflow用户

发布于 2022-08-24 08:05:57

globalRegion = 9U;是符合MISRA的。uint8_t属于“本质上没有符号”的类型组,因此MISRA在为该变量赋值整数常量时使用U后缀是正确的。

似乎有些特定于Klocwork的东西STRONG.TYPE.ASSIGN.CONST是用来警告使用所谓的“魔术数字”的。这似乎与“U”本身没有任何关系。人们普遍认识到,在代码中使用神奇的数字被认为是错误的做法,尽管我不记得MISRA或CERT有一个明确的规则来反对它们。

您可以尝试执行globalRegion = meaningful_name;操作,在这里,应该替换一些名为meaningful_name的明智的常量。您可以尝试以#define meaningful_name 9Uconst uint8_t meaningful_name = 9U;的形式执行此操作。

另一方面,Klocwork手册还在喋喋不休地谈论"ANSI“,就好像它还在1989年一样,所以该手册并没有建立起对该工具的正确性和实用性的信心。

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

https://stackoverflow.com/questions/73468926

复制
相关文章

相似问题

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