+ -
当前位置:首页 → 问答吧 → 关于container_of宏的一个简单问题

关于container_of宏的一个简单问题

时间:2010-05-07

来源:互联网

本帖最后由 welkin 于 2010-05-07 16:28 编辑

看了container_of的定义如下:
  1. #define container_of(ptr, type, member) ({                      \
  2.         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \                       // *
  3.         (type *)( (char *)__mptr - offsetof(type,member) ); })
复制代码
觉得*的那一行有点多余,反正__mptr和ptr的都是指向的同一个地址,那为什么不直接
写成以下的方式呢?
  1. #define new_container_of(ptr, type, member) ({                      \
  2.         (type *)( (char *)(ptr) - offsetof(type,member) );})
复制代码
自己实验了一下,好像两个的结果都一样的,那在什么情况下会有问题?
原来的写法有什么好处?

作者: welkin   发布时间: 2010-05-07

帮顶,第一次看的时候,也觉得很奇怪,内核代码应该不会写废话吧,请高手指点!

作者: shiyalei   发布时间: 2010-05-17

How about if ptr is const type...?

作者: xwindxwind   发布时间: 2010-09-03

热门下载

更多