C语言中的typeof

关键字typeof用于获取表达式的数据类型。只有部分编译器支持,这个特性在linux内核中应用非常广泛,

1. const typeof( ((type *)0)->member ) *__mptr = (ptr);
是定义一个__mptr指针变量,类型和member的类型一样
typeof是获得一个变量的类型,((type *)0)->member 则是tpye类型中的member 变量,一般type为结构体类型,member 则为其中的变量
这里的0只是作为一个临时的指针地址用,任何可以表示地址的数字都可以代替0

 2.

[cpp]  view plain  copy
  1. /* linux-2.6.38.8/include/linux/kernel.h */  
  2.   
  3. #define min(x, y) ({                \  
  4.     typeof(x) _min1 = (x);          \  
  5.     typeof(y) _min2 = (y);          \  
  6.     (void) (&_min1 == &_min2);      \  
  7.     _min1 < _min2 ? _min1 : _min2; })  
  8.   
  9. #define max(x, y) ({                \  
  10.     typeof(x) _max1 = (x);          \  
  11.     typeof(y) _max2 = (y);          \  
  12.     (void) (&_max1 == &_max2);      \  
  13.     _max1 > _max2 ? _max1 : _max2; })  

 

通过typeof获得x和y的数据类型,然后定义两个临时变量,并把x和y的值分别赋给这两个临时变量,最后进行比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值