该宏定义在kernel.h中; 原型为#define container_of(ptr, type, member) ({\ const typeof( ((type *)0)->member ) *__mptr = (ptr);\ (type *)( (char *)__mptr - offsetof(type,member) );}) 其中 ptr是指向正被使用的某类型变量指针;type是包含ptr指向的变量类型的结构类型;member是type结构体中的成员,类型与ptr指向的变量类型一样。 功能是计算返回包含ptr指向的变量所在的type类型结构变量的指针。(比较拗口) 该宏的实现思路:计算type结构体成员member在结构体中的偏移量,然后ptr的地址减去这个偏移量,就得出type结构变量的首地址。 该宏的实现方法:1、通过typeof关键字定义一个与type结构体的member成员相同的类型的变量 __mptr且将ptr值赋给它。 2、用宏offsetof(type,member),获取member成员在type结构中的偏移量 (原型:offsetof(TYPE,MEMBER) ((size_t)&(TYPE *)0)->MEMBER). 定义在stddef.h.) 3、最后将__mptr值减去这个偏移量,就得到这个结构变量的地址了(亦指针)。 typeof是个关键字,可用来引用宏参数的类型。 示例
|
|
来自: changqiong0606 > 《C/C 》