linux内核中的container_of()实现

时间:2012-12-16 11:10:59

标签: c linux-kernel

  

可能重复:
  Rationale behind the container_of macro in linux/list.h

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

为什么我们需要在此处构建mptr而不是直接将ptr投射到char*

2 个答案:

答案 0 :(得分:1)

键入安全性,它确保mptr与指向member的指针的类型相同,而不仅仅是强制转换。如果不是,你会收到警告。

答案 1 :(得分:0)

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

例如,如果偶然ptr恰好是整数,则演员非常乐意将其解释为char*