当前位置 博文首页 > dadalaohua的博客:【C语言笔记】【宏定义系列】 两个数中的最大
宏定义系列内容。用于记录各式各样有用或者没用的宏定义?。
用于通过比较来得到两个数中数值的最大值。例如 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
cs