#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (char *)__mptr - offsetof(type,member) );})container_of : 实现了根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针的功能。
(type *)0 : 好比:假设type结构存放于0其实的内存地址中(在编译的时候换算,不会执行。)
((type *)0)->member : 0指针指向的type结构中的member成员
&((type *)0)->member : 0指针指向的type结构中的member成员的地址(相对于0地址,即得到member成员地址相对type结构体的相对偏移)
typeof (((type *)0)->member) 0指针指向的type结构中的member成员的类型
#define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)
typeof关键字是C语言中的一个新扩展,其的参数可以是两种形式:表达式或类型。
比如:
extern int foo();
typeof(foo()) var; 等价于 int var;
例子2
typeof(int *) a,b;
等价于:
int *a,*b;
例子3
typeof(int *) p1,p2; /* Declares two int pointers p1, p2 */
int *p1, *p2;
typeof(int) *p3,p4;/* Declares int pointer p3 and int p4 */
int *p3, p4;
typeof(int [10]) a1, a2;/* Declares two arrays of integers */
int a1[10], a2[10];