C语言,关于MISRA规范,有几个告警很不明白,请大家帮忙啊

时间:2022-01-10 20:34:50
近期,项目代码要求消除所有MISRA规范的告警,真是很头疼啊,有几个告警,改了这个出那个。。。。。请大牛们帮忙啊
类似下面的代码:

uint8 i = 0U;
uint8 *p;
p = &i; //这句会#1393-D (MISRA-C:2004 10.1/R) The value of an expression of integer type shall not be implicitly converted to a different underlying type if the expression is complex

然后改成
p = (uint8*)&i; //会有(这个非常不明白)#1395-D (MISRA-C:2004 10.3/R) The value of a complex expression of integer type shall only be cast to a type of the same signedness that is no wider than the underlying type of the expression

改成
p = &((uint8)i);  //会有#160 expression must be an lvalue or a function designator

有没有大牛能告诉我,我要怎么取地址才没有这些告警啊?在线坐等啊

2 个解决方案

#1


http://blog.csdn.net/pony_maggie/article/details/5270335

个人感觉其实是错在这里了:
uint8 i = 0U;
要改成:
unit8 i = (uint8) 0U;

#2


引用 1 楼 ForestDB 的回复:
http://blog.csdn.net/pony_maggie/article/details/5270335

个人感觉其实是错在这里了:
uint8 i = 0U;
要改成:
unit8 i = (uint8) 0U;


这个本地试了下,确实不行。对i取地址的时候,i的值应该是不影响这个操作的。

#1


http://blog.csdn.net/pony_maggie/article/details/5270335

个人感觉其实是错在这里了:
uint8 i = 0U;
要改成:
unit8 i = (uint8) 0U;

#2


引用 1 楼 ForestDB 的回复:
http://blog.csdn.net/pony_maggie/article/details/5270335

个人感觉其实是错在这里了:
uint8 i = 0U;
要改成:
unit8 i = (uint8) 0U;


这个本地试了下,确实不行。对i取地址的时候,i的值应该是不影响这个操作的。