GCC泛型宏

在JAVA和CPP这种OOP语言中,都有泛型类,在C语言可以用宏定义实现泛型函数。

main.c

 1 #include <stdio.h>
 2 #define min(x, y) ({ \
 3         typeof(x) _min1 = (x); \
 4         typeof(y) _min2 = (y); \
 5         (void) (&_min1 == &_min2); \
 6         _min1 < _min2 ? _min1 : _min2;})
 7 
 8 int main(int argc, char **argv) 
 9 {
10     int a = 5;
11     int b = 8;
12     int c;
13     double d = 11.1;
14     double e =9.9;
15     double f;
16     c = min(a, b);
17     f = min(d, e);
18     printf("the int min is %d\n",c);
19     printf("the double min is %f\n",f);
20     return 0;
21 }

 

 

Line 3:typeof(x)表示获取x的类型。

Line 5:(void) (&_min1 == &_min2);在编译提示。

若不同类型指针做逻辑比较在编译过程会提示:warning: comparison of distinct pointer types lacks a cast

 

参考资料:《Android驱动开发与移植实战详解》

转载于:https://www.cnblogs.com/kevinhwang/p/5583593.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值