GNU C扩展-typeof

    GUN C提供了一不少扩展(参考C-Extensions),其中就包括了typeof(),其作用类似于C++11 里的 decltype 操作符,可以取得变量或表达式的类型。

    几个比较有意思的使用typeof()的方式:

    1、用于定义函数指针类型的变量

int func(int a);

typeof(func)* func_ptr;

    2、通过typeof()定义用于接收函数返回值的变量

int func(int a);

typeof(func(0)) b;

b = func(0);

    3、实现安全的max、min宏(linux-2.6.7 内核源码中就有这样的使用方式)

#define min(x,y) ({ \

    typeof(x) _x = (x); \

    typeof(y) _y = (y); \

    (void) (&_x == &_y); \

    _x < _y ? _x : _y; })

#define max(x,y) ({ \

    typeof(x) _x = (x); \

    typeof(y) _y = (y); \

    (void) (&_x == &_y); \

    _x > _y ? _x : _y; })

    同时在使用时也必须要注意其使用上的一些限制和注意项:

  1. typeof构造中的类型名不允许包含存储类说明符(extern、static)、允许包含类型限定符(const、volatile)。
  2. typeof是gnu c的扩展,标准c并不包含该关键字,所以编译时需要选定gnu 标准(如:-std=gnu90)进行编译。
  3. 通常如果要兼容标准c,就要用__typeof__
  4. 通常能用typedef的地方就可用typeof
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值