typecheck

在kernel 2.6.30 的typecheck.h源码中有如下定义

#define typecheck(type,x) /
({        type __dummy; /
        typeof(x) __dummy2; /
        (void)(&__dummy == &__dummy2); /
        1; /
})
这个有什么作用呢?下面举例来说明
#define time_after(a,b)                /
        (typecheck(unsigned long, a) && /
         typecheck(unsigned long, b) && /
         ((long)(b) - (long)(a) < 0))

typecheck宏有两个参数,
第一个是一个类型,比如unsigned long,
第二个是一个变量,比如a。
它生成一个unsigned long类型的变量__dummy,
然后利用typeof生成和a同样类型的变量__dummy2,
比较__dummy和__dummy2的地址。
如果它们不是同样类型的指针比较,比如a不是unsigned long,
这时候编译器会有一个警告,让你注意到这个问题。

关于最后的1是复杂的表达式最后会有一个值,这个值就是1


简单的说就是检查x是不是type类型的变量,否则发出警告

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值