MISRA C Rule10.3 0570 Rule11.8 0311 0312
switch语句中case标签'基本类型'与控制表达式的'基本类型'不相符 ;
危险的强制指针类型转换导致const限定符丢失 ;
危险的强制指针类型转换导致volatile限定符丢失 。
工具/原料
Rule10.3 0570 Rule11.8 0311 0312
MISRA C:2012
Rule10.3 0570
0570 This switch case label of 'essential type' '%1s', is not consistent with a controlling expression of essential type '%2s'.
当switch 控制表达式 和其 case 常量表达式 为不同的基本类型类别时,会产生此消息。
可考虑使用强制转换或使用 'U' 后缀(如适用)使得两个表达式的基本类型类表匹配。
官方示例
编程规范修改举例
Rule11.8 0311
0311 Dangerous pointer cast results in loss of const qualification.
对指向'const'数据的指针进行强制转换,这种转换会导致'const'限定符的丢失。这是危险的操作,因为创建的指针会覆盖在其他地方被保护的数据。
根据ISO:C标准(6.3.16.1),指针只能被赋给另外一个指针,这两个指针都必须指向限定的或非限定的可兼容类型,且左侧指针类型必须有右侧指针类型的所有限定权限。这种语言约束可以保证赋值操作、函数参数传递和函数返回表达式中的类型说明符得到保留。违反这条规则的赋值语句将会生成约束错误消息0562。然而,由于使用强制转换,类型说明符可能被覆盖。
编程规范修改举例
NO
Rule11.8 0312
0312 Dangerous pointer cast results in loss of volatile qualification.
对指向'volatile'数据的指针进行强制转换,这种转换会导致'volatile'限定符的丢失。这是危险的操作,因为创建的指针会忽略原始指针的volatile特性。
官方示例
编程规范修改举例