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

container_of宏实现中的两个问题

    来源: 互联网  发布时间:2017-04-21

    本文导语:  #define container_of(ptr, type, member) ({                               const typeof( ((type *)0)->member ) *__mptr = (ptr);             (type *)( (char *)__mptr - offsetof(type,member) );}) 为什么不直接把ptr减去偏移量?为...

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


为什么不直接把ptr减去偏移量?为什么减去偏移量时对__mptr进行(char*)转换?
网上资料大多说的是0的强制转换问题,对于上面两个问题我还没明白。多谢!

|
第一个问题,是因为内核改进,防止程序错误加的一个编译保险措施。当用错的时候编译会告警,你会发现删除也没事。
第二个问题,char *表示编译按byte来算,必须的。不然+-法算的距离就没谱了。

|

++
没有char *,每次+-就是member大小

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












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


  • 站内导航:


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

    ©2012-2021,