关于Linux中宏#define container_of(ptr, type, member)定义的疑问

fluidog 2021-03-06 02:01:39
首先linux中有如下定义

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

我的疑问是,为什么不直接用ptr-offsetof(type,member),而是先要另__mptr = (ptr),然后用__mptr - offsetof(type,member)。
...全文
315 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
叨陪鲤 2021-03-12
  • 打赏
  • 举报
回复
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《container of()函数简介》, 一起来围观吧 https://blog.csdn.net/s2603898260/article/details/79371024?utm_source=app&app_version=4.5.2
叨陪鲤 2021-03-07
  • 打赏
  • 举报
回复
对,是为了编译时能及时检查出类型错误问题
fluidog 2021-03-06
  • 打赏
  • 举报
回复 3
__mptr = (ptr)可用于类型检测,如果传入的ptr类型错误,可以在编译阶段直接检测出来。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧