【发布时间】:2017-10-27 02:49:27
【问题描述】:
谁能给我解释一下这两个宏?
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
除了为什么 offset_of 为 (size_t) 而 container_of 为 (char *) 之外,我什么都理解?
(char *) -(size_t) 如何在这个宏中工作?
我原以为它们都是同一类型。比如 char *。
【问题讨论】:
-
我不知道这怎么不会崩溃。但
(char *) - size_t' is just a pointer decrement. Whenp` 是一个指针,p-4将p递减4*sizeof(*p)字节。
标签: c linux linux-kernel linux-device-driver