【C语言笔记】【linux宏定义系列】 两个数中的最大值 max
linux宏定义系列内容。用于记录在linux kernel之中各式各样的宏定义☺。
宏定义说明
用于通过比较来得到两个数中数值的最大值。例如 x = 60 x=60 x=60, y = 36 y=36 y=36,会得到60。
这个宏会进行严格的类型检查。
该宏定义来自linux kernel 3.10。
实现代码
#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
宏定义中:
x表示要判断的第一个数。
y表示要判断的第二个数。
示例程序
示例程序用于计算a和b两个数中的最大值。
int main(int argc, char* argv[])
{
int a, b;
a = 60;
b = 36;
printf("max : %d\n", max(a, b));
return 0;
}
实现过程
-
typeof(x) _max1 = (x)
使用一个与参数
x
相同数据类型的临时变量来保存参数x
的值,避免类似于自增或自减带来的影响。 -
typeof(y) _max2 = (y)
使用一个与参数
y
相同数据类型的临时变量来保存参数y
的值,避免类似于自增或自减带来的影响。 -
(void) (&_max1 == &_max2)
这一句代码用于检测这个宏里的两个参数的数据类型是否相同,如果类型不相同,则编译器就会出现警告提示。
-
_max1 > _max2 ? _max1 : _max2
比较
_max1
和_max2
这两个数哪一个比较大,返回较大数的数值。
[参考资料]
linux kernel 3.10
本文链接:https://blog.csdn.net/u012028275/article/details/118060657