当前位置: 技术问答>linux和unix
container_of疑问
来源: 互联网 发布时间:2017-03-04
本文导语: #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );}) 第二行的作用是什么,去掉会...
#define container_of(ptr, type, member) ({
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})
第二行的作用是什么,去掉会可能引起什么样的后果?
“-”操作会影响减数获被减数的值吗?
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})
第二行的作用是什么,去掉会可能引起什么样的后果?
“-”操作会影响减数获被减数的值吗?
|
({语句组}) 是GCC的扩展,返回语句组里最后一个语句的值。
这里也是返回相减后的值
确实可以简化成1行搞定,申请__mptr这个临时变量意义不大。原因我也不知,
大概 (__mptr - 偏移) 比 (ptr - 偏移) 更容易让人理解吧
这里也是返回相减后的值
确实可以简化成1行搞定,申请__mptr这个临时变量意义不大。原因我也不知,
大概 (__mptr - 偏移) 比 (ptr - 偏移) 更容易让人理解吧
|
http://bbs.chinaunix.net/thread-3618696-1-1.html
大概如那个lz所说吧
你的眼光非常敏锐,今天仔细一看container_of还真有玄机。
大概如那个lz所说吧
你的眼光非常敏锐,今天仔细一看container_of还真有玄机。