MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

2025-10-19 23:35:07

switch语句中case标签'基本类型'与控制表达式的'基本类型'不相符 ;

危险的强制指针类型转换导致const限定符丢失 ;

危险的强制指针类型转换导致volatile限定符丢失 。

工具/原料

Rule­10.3 0570 Rule­11.8 0311 0312

MISRA C:2012

Rule­10.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' 后缀(如适用)使得两个表达式的基本类型类表匹配。

官方示例

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

编程规范修改举例

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

Rule­11.8 0311

0311  Dangerous pointer cast results in loss of const qualification. 

对指向'const'数据的指针进行强制转换,这种转换会导致'const'限定符的丢失。这是危险的操作,因为创建的指针会覆盖在其他地方被保护的数据。

根据ISO:C标准(6.3.16.1),指针只能被赋给另外一个指针,这两个指针都必须指向限定的或非限定的可兼容类型,且左侧指针类型必须有右侧指针类型的所有限定权限。这种语言约束可以保证赋值操作、函数参数传递和函数返回表达式中的类型说明符得到保留。违反这条规则的赋值语句将会生成约束错误消息0562。然而,由于使用强制转换,类型说明符可能被覆盖。

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

编程规范修改举例

NO

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

Rule­11.8 0312

0312  Dangerous pointer cast results in loss of volatile qualification. 

对指向'volatile'数据的指针进行强制转换,这种转换会导致'volatile'限定符的丢失。这是危险的操作,因为创建的指针会忽略原始指针的volatile特性。

官方示例

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

编程规范修改举例

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

MISRA C Rule­10.3 0570 Rule­11.8 0311 0312

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢