1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表 ...
c语言的结构体中,因为字节对齐的问题,导致成员地址并不能根据类型的大小进行计算。例如: offsetof宏的实现如下: 哈哈,复杂吧,解释一下:由于造成空洞的对齐动作是由编译器负责完成的,这里有一个欺骗编译器的指令: TYPE , 意思是定义一个指向TYPE类型的指针,且该指针值 也就是该type类型的地址 为 ,当然这是不可能引用成功的, 地址早已 被操作系统保护起来了: ,那么这么做意义何在 ...
2017-10-18 10:22 0 1802 推荐指数:
1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表 ...
1、#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) 1.1 功能: 返回结构体TYPE中MEMBER成员相对于结构体首地址的偏移量,以字节为单位 ...
1、前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表 ...
,还是在一开始就被一个小小的 offsetof 宏搞晕了。 offsetof 宏 先来看看offsetof宏是 ...
https://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总sizeof()功能:计算数据空间的字节数1.与strlen()比较 ...
今天为大家分享一篇C语言#define拼接宏定义实现方式,具有很好的参考价值,希望对大家有所帮助。 使用场合:拼接两个宏,一个是传入的宏。 遇到问题:普通的拼接宏定义,对于“传入的宏”不会被替换,反而原封不动的接了上去。 解决方法:经过试验以及网上查阅,以下方法即可以解决上述问题 ...
最大值,最小值 #define MAX( x, y ) ( (x) > (y) ? (x) : (y) )#define MIN( x, y ) ( (x) < (y) ? (x) : ...
Singleton 设计模式应用非常广泛,实现起来也很简单,无非是私有化若干个构造函数,“operator =” 操作符,以及提供一个静态的创建和销毁方法。但是对每个类都写这些雷同的代码是本座不能容忍的,因此,本座使用宏把整个 Singleton 模式封装起来,无论是类的定义还是类的使用 ...