当前位置:  技术问答>linux和unix

container_of() 的实现代码为什么这么写

    来源: 互联网  发布时间:2016-12-21

    本文导语:  看到下面的定义,有点不明白。 为什么不直接这么定义呢? #define container_of(ptr, type, member) ({ (type *)( (char *)(ptr) - offsetof(type,member) );})   ------ Linux Source Code ------ /**  * container_of - cast a member of a stru...

看到下面的定义,有点不明白。
为什么不直接这么定义呢?
#define container_of(ptr, type, member) ({
(type *)( (char *)(ptr) - offsetof(type,member) );})

  ------ Linux Source Code ------
/**
 * container_of - cast a member of a structure out to the containing structure
 * @ptr: the pointer to the member.
 * @type: the type of the container struct this is embedded in.
 * @member: the name of the member within the struct.
 *
 */
#define container_of(ptr, type, member) ({
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})

|


我想,这可能是为了对ptr的类型进行编译器检查,
如果ptr不小心用错了,不是member这个名字的类型,编译器就会有反应。
从逻辑上这一句确实没作用,但是内核中比较常用这种技巧。

|
ptr是不是member类型,type中是不是包涵member,type的类型,都一并检查了

|


确实是的

|
知道一个结构体成员的地址怎么去找结构体的地址

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 宏container_of
  • container_of疑问
  • Linux内核的 container_of宏的疑问?
  • 請教關於container_of的實現原理
  • 求解释,container_of()宏


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3