c语言新手求教一个linux内核代码的问题

yxzzkx yxzzkx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)

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

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

size_t 是unsigned long
typedef struct xxx
{
type1 member;
……(结构体中其他域)
}type;
定义变量:
type a;
type * b;
type1 * ptr;

&((type *)0)->member取得的是个什么,为什么要转为u long
为什么要用__mptr当中间变量,不直接用ptr。
最后用char型的__mptr减ulong的偏移量可以得到该结构体的地址吗?
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
yxzzkx
Linux_Kernel 4,469 成员 17,458 内容