而不是将container_of定义为:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})
为什么这不会起作用:
#define container_of(ptr, type, member) ({ \
(type *)( (char *)(ptr) - offsetof(type,member) );})
定义中第一行的用法是什么?
答案 0 :(得分:7)
它增加了某种程度的类型安全性。使用你的第二个版本,我可以为ptr传递任何内容,它可以正常编译。使用内核的版本,如果传入的ptr
指针与type.member
的类型不匹配,则至少会收到警告。