typeof的理解

 
linux内核相关知识理解
2008-11-27 22:42

1、#define offsetof(s,m) (size_t)&(((s*)0)->m)其中,s为一个结构体,m是其一个成员,这个宏的作用是返回m在s种的偏移量,解释如下:

(s*)0的作用是将0转化一个指向s结构体的指针,使得数字0变成了地址0,进而&((s*)0->m的意思是取得类s种成员变量m的地址,因为基地址为0,因此这个也就是成员m在s种的偏移量

2、typeof:typeof用来获取一个表达式的类型,并用它来定义一个另外一个变量,也就是说用这个表达式的类型定一个变量。当然,如果这个表达式的类型很容易就被看出来也就不用大动干戈了
,可是有些时候,表达式的类型还真是难以简简单单看出来,这个时候typeof就派上用场了。结合内核链表的用法,给出一个通过成员变量的指针找到宿主结构体指针的例子:


#define container_of(ptr,type,member) ({const typeof(((type *)0)->member) *__mpter=(pter); (type *)((char *)__mptr-offsetof(type,member))})中间的const typeof(((type *)0)->member) *__mpter=(pter);就是典型的用typeof定义一个新变量的例子,通过对offsetof和typedef的解析,也就不难理解这个宏的意思了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值