c语言新手求教一个linux内核代码的问题
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
size_t 是unsigned long
typedef struct xxx
{
type1 member;
……(结构体中其他域)
}type;
定义变量:
type a;
type * b;
type1 * ptr;
&((type *)0)->member取得的是个什么,为什么要转为u long
为什么要用__mptr当中间变量,不直接用ptr。
最后用char型的__mptr减ulong的偏移量可以得到该结构体的地址吗?