1223_MISRA_C规范学习_指针与数组的规则要求

213 篇文章 6 订阅

全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!

17.1, 这一条应该是指针和数组一起配合使用的时候要求的,指针的运算必须是指向数组或者数组元素的时候才允许。因为对于嵌入式的硬件访问,在便捷实现上可能有很多种可能。很典型的一个就是存储按照物理地址进行访问的时候,应该还是有这样的可能性。不过,相关的担忧点其实也很容易理解。因为存储排布可能情况还是很多的,而指针的增减等运算其实是跟所指向的对象类型的空间占用是有关系的。

17.2,指针的减法,只能够应用于两个指针指向同一种数据对象的时候。这个理解的出发点其实是跟上面提到的基础知识有相同之处,还是指针增减的时候跳跃的跨度单位问题。或许,这种未定义的行为就是由于跨度不清晰导致的。而用于数组的操作的时候很自然,内存的排布肯定是连续规律的。

17.3, 除非指针指向同一数组,否则不要使用>、>=、<、<=等操作。其实,这样的隐患也可以用指针加减操作的时候跨越单位补偿的特点来进行举例。

17.4, 数组索引是唯一允许的指针运算方式。这一条要求看起来很苛刻,或许我现在接触到的软件中违规还是很多的。很典型的一个例子还是内存区域的操作处理,但是替代方案还是可以考虑的。

17.5, 对象声明不能够包含2级以上的指针,这样会增加软件理解的难度,导致可读性以及可维护性的下降。但是,很多时候这是提升效率的一些技巧手段,或许这是为什么规则是建议而不是强制的原因。

17.6,简单总结:自动对象消失后,原来指向它的指针就不能再用了。原因很非常简单了,自动对象的存储地址空间其实是动态变化的。而且,其消失以后的处理不仅是没有意义的,而且是后果不可预测的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值