misra

1 。misra不管operator两边是expression还是变量,基本类型类别必须一样


比如S8>u8 不行, u16>u32 可以


2。 如果operand是expression,那要求就多了。

参看rule10.7

u32+u16+16是可以,因为所有的operand在内存中实际都是按照u32来执行的,不会有精度损失问题。

U32+(u16+u16)不可以,因为(u16+u16)内存中实际是按u16计算,如果相加溢出则舍去。这个时候再和一个wider的u32相加,那coder的意图很有可能是不想有任何精度损失的,只是后面可能是表示一个整体就先算了。所以misra不允许这种。


那u32 &(u16+u16)也不行, u32&u16是可以的。


3,  #1,#2讲的类似的内容,  还有个不容易理解的点

u32(u16+u16) 这种强制转换也不行,参见rule10.8. 

在16bit机器和32bit机器上会算出不同的结果。 虽然工作当中都是32bit机器,不会有任何问题,算出来的值不会有丢失。但是你写code的出发点是可移植的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值