我需要解决米斯拉相关的问题和证书相关的问题。
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‘
globalRegion = 9U;如果被键入将得到另一个错误,则表达式的porting.cast.size转换为可能不兼容的类型。
globalRegion = ((unit8_t)9U);如何在没有任何新错误的情况下解决此错误
发布于 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 9U或const uint8_t meaningful_name = 9U;的形式执行此操作。
另一方面,Klocwork手册还在喋喋不休地谈论"ANSI“,就好像它还在1989年一样,所以该手册并没有建立起对该工具的正确性和实用性的信心。
https://stackoverflow.com/questions/73468926
复制相似问题