1224_MISRA_C规范学习_结构体与联合的规则要求

213 篇文章 6 订阅

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

18.1, 结构体以及联合在完成转换的时候必须保证结构体以及联合的信息完整性。

这里涉及到一个概念,也就是C语言中的不完全类型。那么什么事不完全类型呢?顾名思义,也就是信息不完备的一种表达形式。比如说,声明了一个数组但是不给出数组元素的个数;再比如使用了一个结构体或者联合的名称但是却不给出其定义。这种暂时不给出的信息在编译器最后处理的时候必须能够获知,否则的话就是一种错误。

这样的规则满足或者避免错误其实也很简单,可以通过一个固定的实现模式。尽量在使用结构体或者联合的时候采用先定义数据类型后进行声明定义的方式,相关的信息直接在一个头文件给出完整信息。其他地方用到的时候直接引用这个头文件的信息即可。

18.2, 不允许重叠对象的赋值。

这一条很容易理解,但是回忆了一下过去的经理似乎没有找到什么经验性的记忆。可能我接触到的软件设计中这种现象很少吧。

18.3, 一块存储区不能够用于其他不相干的目的。

存储应该是可以分时复用的,尤其是堆栈这样的应用。但是这里是与结构体和联合相关的一条规则要求,应该已经逃出了这样的概念。从规则本身的说明也可以看得出,这个并不是在施加这样的限制而是为了避免在存储分时复用的时候可能出现的冲突或者影响。

18.4, 不允许使用联合。

这一条要求看起来有一些苛刻,应该是很难实现。尤其是在寄存器操作方面,如果采用位域的方式来实现应该是一个可读性以及可维护性很好的模式。而且,这部分不需要考虑考可移植性,因为不同的硬件设计上这部分或许就是不相同的。因此,可能并不会有可移植性的要求。

关于联和中的存储的对齐问题,之前我其实做过简单的整理,虽然已经过去很多年了倒是可以找回之前的笔记看看。

以前的学习笔记: C语言中联合的使用基础_grey_csdn的博客-CSDN博客

变型数据记录的支持。

进行变型数据记录的支持是联合常用的一种场景。这里举出的例子是CCP协议的实现。其实我自己看到这部分的时候考虑到的第一个例子也是协议栈相关的,只不过我想到的是J1939协议栈的支持。针对这里提到的变型数据,其实换一个说法或许会更容易让人接受,其实就是相同的一组数据可能会有多种解析的方式,针对这种情况的支持就是变型数据记录的支持。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值