Chinaunix首页 | 论坛 | 博客
  • 博客访问: 478216
  • 博文数量: 115
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 1401
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-21 16:03
文章分类

全部博文(115)

文章存档

2013年(1)

2010年(17)

2009年(76)

2008年(21)

我的朋友

分类: LINUX

2010-04-02 09:44:25

最近做毕业设计,读到Litmus源代码,多个地方涉及到container_of宏,其实现如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})
认真分析了一下,这个宏的功能是得到包含某个结构成员的结构的指针:
__mptr指向的是一个type结构里typeof(((type *)0)->member)类型member成员的指针,offsetof(type,member)是这个成员在结构中的偏移,单位是字节,所以为了计算type结构的起始地址,用__mptr减去它自己的偏移。
阅读(768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~