、 switch语句中case标签'基本类型'与控制表达式的'基本类型'不相符 ; 危险的强制指针类型转换导致const限定符丢失 ; 危险的强制指针类型转换导致volatile限定符丢失 。
工具/原料
Rule10.3 0570 Rule11.8 0311 0312
MISRA C:2012
Rule10.3 0570
1、 0570 This switch case label of 'essential type' '%1s', is not consistent with a controlling expression of essential type '%2s'. 当switch控制表达式和其case常量表达式为不同的基本类型类别时,会产生此消息。可考虑使用强制转换或使用 'U' 后缀(如适用)使得两个表达式的基本类型类表匹配。
2、官方示例

3、编程规范修改举例


Rule11.8 0311
1、 0311 Dangerous pointer cast results in loss of const qualification. 对指向'const'数据的指针进行强制转换,这种转换会导致'const'限定符的丢失。这是危险的操作,因为创建的指针会覆盖在其他地方被保护的数据。
2、根据ISO:C标准(6.3.16.1),指针只能被赋给另外一个指针,这两个指针都必须指向限定的或非限定的可兼容类型,且左侧指针类型必须有右侧指针类型的所有限定权限。这种语言约束可以保证赋值操作、函数参数传递和函数返回表达式中的类型说明符得到保留。违反这条规则的赋值语句将会生成约束错误消息0562。然而,由于使用强制转换,类型说明符可能被覆盖。

3、编程规范修改举例NO

Rule11.8 0312
1、 0312 Dangerous pointer cast results in loss of volatile qualification. 对指向'volatile'数据的指针进行强制转换,这种转换会导致'volatile'限定符的丢失。这是危险的操作,因为创建的指针会忽略原始指针的volatile特性。
2、官方示例

3、编程规范修改举例

