+ -
当前位置:首页 → 问答吧 → [原创]在ubuntu7.10上搭建uClinux编译开发环境并用Skyeye进行仿真

[原创]在ubuntu7.10上搭建uClinux编译开发环境并用Skyeye进行仿真

时间:2011-08-30

来源:互联网

在Linux中有一段宏:
引用:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

而上面宏中的offsetof宏的定义如下:
引用:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)


上面的代码我有以下几个疑问:
1.offseof中的size_t) &((TYPE *)0)->MEMBER为什么要强制转换成size_t类型的?
2.既然offseof的返回类型是size_t类型的,那(type *)( (char *)__mptr - offsetof(type,member) 中为什么又要把__mptr的类型转换成char * 呢?

作者: Crazier   发布时间: 2011-08-30

这个宏是Linux里面最难的宏了,得结合内存的位置来看,再看看书。

作者: cnkilior   发布时间: 2011-08-30

在Linux中有一段宏:
引用:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

而上面宏中的offsetof宏的定义如下:
引用:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)


上面的代码我有以下几个疑问:
1.offseof中的size_t) &((TYPE *)0)->MEMBER为什么要强制转换成size_t类型的?
2.既然offseof的返回类型是size_t类型的,那(type *)( (char *)__mptr - offsetof(type,member) 中为什么又要把__mptr的类型转换成char * 呢?

作者: Crazier   发布时间: 2011-08-30

这个宏是Linux里面最难的宏了,得结合内存的位置来看,再看看书。

作者: cnkilior   发布时间: 2011-08-30

在Linux中有一段宏:
引用:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

而上面宏中的offsetof宏的定义如下:
引用:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)


上面的代码我有以下几个疑问:
1.offseof中的size_t) &((TYPE *)0)->MEMBER为什么要强制转换成size_t类型的?
2.既然offseof的返回类型是size_t类型的,那(type *)( (char *)__mptr - offsetof(type,member) 中为什么又要把__mptr的类型转换成char * 呢?

作者: Crazier   发布时间: 2011-08-30

这个宏是Linux里面最难的宏了,得结合内存的位置来看,再看看书。

作者: cnkilior   发布时间: 2011-08-30

热门下载

更多