本帖最后由 791314247 于 2021-1-19 17:26 编辑
如下程序:
unsigned int a;
unsigned int b; signed int c; function(void) { c = a-b; /* 违反了MISRA规则10.8 */ } 如上程序,c = a-b违反了MISRA规则10.8:
意思是复合表达式的值不能转换为不同类型的值或者转换为了更广泛的类型
请问如何最方便的优化掉这个警告?不想再加中间变量了
我试过以下几个方案:
1,c = (signed int)(a-b); /* 这个肯定不行,还是报警 */
2,c = (signed int)a - (signed int)b; /* 这个在a或者b的值很大的时候是否有风险呢 */
补充:第2个方案是不行的,比如当b=0XFFFFFFFF的时候,b会被解释成-1,那么a - -1=a+1,和预期是不同的结果
|