0

可能重复:
linux/list.h 中的 container_of 宏背后的基本原理

#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})\

为什么我们需要在mptr这里构造而不是ptr直接转换为 a char*

4

2 回答 2

1

类型安全,它确保它mptr与指针的类型相同,member而不仅仅是强制转换。如果不是,您将收到警告。

于 2012-12-16T11:15:10.107 回答
0

内核中给出的宏具有类型检查,即它确保ptr具有与类型“指向类型的指针”的赋值兼容的类型member

例如,如果偶然ptr碰巧是一个整数,那么演员很乐意将其解释为char*.

于 2012-12-16T11:17:59.003 回答