当前位置: 技术问答>linux和unix
Linux内核的 container_of宏的疑问?
来源: 互联网 发布时间:2016-08-18
本文导语: 通过一个结构的成员的地址和结构名以及成员名,获得结构的首地址。 #define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr -...
通过一个结构的成员的地址和结构名以及成员名,获得结构的首地址。
直接写成这样也可以啊,有什么弊端?请高手指教?
[/code]
#define container_of(ptr, type, member) ({
(type *)( (char *)ptr - offsetof(type, member));})
[/code]
顺便纠正下
这几篇文章把该函数的功能误写成了(应该是笔误吧):获得某结构中某成员的入口地址.
http://blog.chinaunix.net/u3/95743/showart_1919346.html
http://blog.oracle.com.cn/index.php/270927/viewspace-34644
#define container_of(ptr, type, member) ({
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})
直接写成这样也可以啊,有什么弊端?请高手指教?
[/code]
#define container_of(ptr, type, member) ({
(type *)( (char *)ptr - offsetof(type, member));})
[/code]
顺便纠正下
这几篇文章把该函数的功能误写成了(应该是笔误吧):获得某结构中某成员的入口地址.
http://blog.chinaunix.net/u3/95743/showart_1919346.html
http://blog.oracle.com.cn/index.php/270927/viewspace-34644
|
加上
const typeof( ((type *)0)->member ) *__mptr = (ptr);
更严谨,没别的
const typeof( ((type *)0)->member ) *__mptr = (ptr);
更严谨,没别的