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         int a = 5;
10         int b = 8;
11         int c;
12         double d = 11.1;
13         double e =9.9;
14         double f;
15         c = min(a, b);
16         f = min(d, e);
17         printf("the int min is %d\n",c);
18         printf("the double min is %f\n",f);
19         return 0;
20 }

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

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

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

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

时间: 2024-11-08 21:30:25

GCC泛型宏的相关文章

gcc预置宏定义

通过以下命令可以查看gcc的内置宏定义 gcc -E -dM - </dev/null [email protected]>gcc -E -dM - </dev/null                                                                                #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define __CHA

Linux 内核中的 GCC 特性

转载:http://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/?S_TACT=105AGX52&S_CMP=tec-csdn Linux 内核中的 GCC 特性 了解用于 C 语言的 GCC 扩展 Linux? 内核使用 GNU Compiler Collection (GCC) 套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示等等.了解这些特殊的 GCC 特性,学习如何在 Linux 内核中使用它们. 0 评论:

Linux学习笔记——举例说,makefile 添加宏定义

0.前言 从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意借助博客总结makefile的相关知识.通过样例说明makefile的详细使用方法. 例说makefile分为下面几个部分.很多其它内容请參考[例说makefile索引博文] 1.仅仅有单个C文件 2.含有多个C文件 3.须要包含头文件路径 4.添加宏定义 5.添加系统共享库 6.添加自己定义共享库 7.一

C++预定义宏 C++ Predefined Macros

一.ANSI C标准预定义宏 __LINE__:在源代码中插入当前源代码行号: __FILE__:在源文件中插入当前源文件名: __DATE__:在源文件中插入当前的编译日期 __TIME__:在源文件中插入当前编译时间: __STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1,表明是标准的C程序: //__cplusplus:当编写C++程序时该标识符被定义,表明是标准的C++程序.(这个是VC的吧?) MSDN上的解释 Macro Description __DATE__ T

Linux学习笔记——例说makefile 增加宏定义

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [代码仓库]--makefile-example

编写C语言跨平台函数(以清屏和休眠函数为例)

支持C语言的平台有许多,常见的编译器如VC.gcc.Clang等.不同的编译器共同点是都支持标准C(ANSI C),但是各自却又有自己独立的.平台相关的功能以及函数接口.这通常为程序的移植性带来很多问题.这里我简单谈一下解决方案. 常见思路 常见的解决跨平台移植的思路就是利用 宏.不同编译器有各自不同的宏,宏有很多,具体可以参考编译器的相关手册.通过判断一个宏是否存在来选择性的包含头文件或调用函数,其本质就是一种条件编译. 比如一些平台相关的函数,在不同平台要包含不同文件. #if define

跟我一起学CMake

如今CMake使用的人数越来越多,包括我项目组里,很多大牛们在写Qt程序的时候都不用自带的qmake,貌似会出现很多问题,他们往往都用自己写的CMake来编译系统,今天我也和大家一起来学学这个高大上的工具--CMake. 首先,一个CMake要想运行,必须在同目录下有CMake脚本,说说是脚本,其实并没什么可怕,说白了就是一串CMake作者自己写的token语法分析文件--CMakeLists.txt. 这个文件比如你的项目有很多文件夹,必须在每个源代码文件夹下都有一个CMakeLists.tx

[翻译]位运算暗黑魔导书

原文地址:http://graphics.stanford.edu/~seander/bithacks.html 有本书叫hack's delight也是主讲位运算的. 下面正文开始翻译吧,不定时更新. 声明: 如无特殊说明,所有的代码段都是不受版权限制的,如果喜欢,大家可以随便使用.文章内容由Sean Eron Anderson收集整理于1997-2005年.位运算的相关代码.说明以及分类希望能够给大家带来帮助,但是不对于该内容是否适合特定用途提供任何担保(or授权?).截止2005年5月5日

【LINUX网络编程】Makefile文件

<Linux网络编程>(第二版) 第2章的一些读书笔记 ↓ Makefile:在一个含有较多文件的工程中,定义一系列规则来指定编译文件的顺序,可用于管理工程. Makefile指定了工程中的哪些源文件需要编译以及如何编译.需要创建那些库文件以及如何创建这些库文件.如何最后产生我们想要的可执行文件.为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,编译整个工程你所要做的唯一的一件事就是在shell 提示符下输入make命令,整个工程就完全自动编译. 首先来看一下Linux