标签:efi sig lin 程序 宏定义 直接 col mem text
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member: the name of the member within the struct. * */ #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );})
上面这两个宏在 Linux 内核中非常常见,比如 linux 内核链表 list_head、工作队列 work_struct 中。乍一看,这两个宏给人感觉很复杂,尤其是 container_of 宏。其实,再复杂的结构也是由简单的东西构造而成的,下面我们就一层一层的剥开这两个宏的真相!!!
offsetof 用于计算 TYPE 结构体中 MEMBER 成员的偏移位置。
第一次看到这个宏定义,第一反应就是直接使用 0 地址不会导致程序崩溃吗?
标签:efi sig lin 程序 宏定义 直接 col mem text
原文地址:https://www.cnblogs.com/shiwenjie/p/9201668.html