/*
pos: 某个结构体指针
head: 某个链表的表头,这个链表的成员是pos类型的结构体
member: pos结构体中的一个成员(一般是一个结构体,包含两个指向自身类型的指针next和prev,用于形成链表。)
这个宏的作用就是,将链表中所有的pos类型的结构体逐一取出。
*/
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
/*
ptr: type结构体中名为member的成员的地址。
type: 某个结构体类型。
member: type结构体中的一个成员,名字叫做member。
功能:ptr的地址是已知的,ptr的地址,减去其在type结构体中的偏移,
即可以得到ptr所在的结构体的地址。
*/
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - ((unsigned int) &((type *)0)->member);})
阅读(687) | 评论(0) | 转发(0) |