/*
读书笔记类型多种多样,有摘抄型的,有感想型的,有批注型的,有摘要型的……
现在正在研读《C和指针》,其中有很多我认为必要的知识点,摘抄并简单整理了一下,记录在这里。
*/
40. 联合的所有成员引用的是内存中的相同位置,当你想在不同的时刻把不同的东西存储于同一位置,就可以使用联合。
41. 在一个成员长度不同的联合里,分配给联合的内存数量取决于它的最长成员长度。这样,联合的长度总是足以容纳它的最大成员,如果这些成员长度相差悬殊,当存储长度较短的成员时,浪费空间是相当可观的,在这种情况下,更好的方法是在联合中存储指向不同成员指针而不是直接存储成员本身。
42. 联合变量可以被初始化,但这个初始值必须是联合第一个成员的类型,而且它必须位于一对花括号里面。
/*
博主观点:
这一篇笔记内容较少,全部是关于union的,算是关于联合的专题笔记了,呵
最早对union有深入的认识,是在学习TI TMS320F2812 DSP的时候,在那之前仅仅对union有教科书上的认识。TI的官方例程,把对2812的寄存器的访问定义一个位段,可以按位访问,然后再定义一个union,这样既可以整体访问也可以按位访问。当时觉得union原来是这样使用的,非常非常棒。
再后来接触MISRA-C 2004标准,其中18.4规定,“不要使用联合”,而且这是一条强制规则,说白了就是“禁止使用联合”。MISRA-C是应用于汽车行业的C语言规范,对安全性的要求是放在第一位的,所以对union这种重用内存的行为可能导致的安全隐患不得不慎重。所以干脆就禁止使用了,当然这是我的猜测。
*/
MISRA-C规范可以参考:http://wenku.baidu.com/view/c6af1d51964bcf84b8d57b29.html?re=view
文章评论(0条评论)
登录后参与讨论