linux kernel中typeof和container_of的理解

本文详细解析了Linux内核中typeof宏的引入原因及使用方法,以及container_of宏在链表操作中的应用。通过具体实例展示了如何利用这些宏实现高效的数据结构操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.typeof引入原因

#define min(x,y) ((x) > (y) ? (y) : (x))

如果min(x++ , y++),这个宏定义就会有问题


#define min(X,Y)  \
(__extension__  \
({  \
   typeof(X) __x=(X), __y=(Y);   \
   (__x<__y)?__x:__y;  \
}) \

此时linux kernel引入了typeof,即取变量的定义。

2.container_of

1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。
2>接口:
container_of(ptr, type, member) 
ptr:表示结构体中member的地址
type:表示结构体类型
member:表示结构体中的成员
通过ptr的地址可以返回结构体的首地址

举例说明

struct student{

...

list_head list

};

list_head *now_list;

container_of(nowlist, struct student, list) ;

此时通过container_of就得到了nowlist对应的student的首地址。

经常用于链表操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值