|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
内核中源码是这样的
& t/ w' T% A$ \& E3 T/ h5 y( `! @7 s
#define container_of(ptr, type, member) ({ \ / @* C/ l4 |2 U$ T2 D' N: Q
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
6 T5 C2 S8 N7 D2 j% q5 Z(type *)( (char *)__mptr - offsetof(type,member) ); \" m: `* W; l7 C$ Y5 W
})5 a4 Y2 d5 t* z2 Q7 C9 `
4 H: i3 U! j! [1 _+ \
4 {5 k2 `3 {9 n9 X8 J. U0 _: I为什么要用typeof获取成员类型?直接写成这样不可以吗?4 [9 m, r( N- _% x
1 J% E1 N, h Y- ?' Q#define container_of(ptr, type, member) ({ \ K/ P& k6 v4 k6 f+ v
(type *)( (char *)ptr - offsetof(type,member) ); \% V* [. s4 q' w% M, g
})* \( E; W+ }) G/ t. T
+ D- p+ K6 o( c1 K( s* x
4 Q+ S1 l, T$ k, r4 ]+ L' p: Z* j内核中写法有什么好处吗? |
|