首先看看函数的原型:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
其原理是利用,结构体中的一个成员变量的地址获得该结构体的首地址。
其中:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
注: typeof 关键字是用来定义变量数据类型的。
如: 把y定义成x指向的数据类型: typeof(*x) y;
解析如下:
const typeof ( ( (type * )0) -> member) * __mptr =(ptr)<