本文主要是介绍【C语言笔记】【宏定义系列】 两个数中的最小值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【C语言笔记】【linux宏定义系列】 两个数中的最小值 min
linux宏定义系列内容。用于记录在linux kernel之中各式各样的宏定义☺。
宏定义说明
用于得到两个数中数值的最小值。例如 a = 25 a=25 a=25, b = 18 b=18 b=18,会返回得到18。
这个宏会进行严格的类型检查。
该宏定义来自linux kernel 3.10。
实现代码
#define min(x, y) ({ \typeof(x) _min1 = (x); \typeof(y) _min2 = (y); \(void) (&_min1 == &_min2); \_min1 < _min2 ? _min1 : _min2; })
宏定义中:
x表示要判断的第一个数。
y表示要判断的第二个数。
示例程序
示例程序用于得到a和b的中数值较小的数。
int main(int argc, char* argv[])
{int a, b;a = 25;b = 18;printf("min : %d\n", min(a, b));return 0;
}
实现过程
-
typeof(x) _min1 = (x)
使用一个与参数x相同数据类型的临时变量
_min1
来保存参数x的值,避免类似自增或自减带来的影响。 -
typeof(y) _min2 = (y)
使用一个与参数y相同数据类型的临时变量
_min2
来保存参数y的值,避免类似自增或自减带来的影响。 -
(void) (&min1 == &min2)
这个用于检测这个宏里的两个参数的数据类型是否相同,如果不相同,则编译器就会出现警告提示。
-
_min1 < _min2 ? _min1 : _min2
比较两个数哪一个比较小,返回较小数的数值。
[参考资料]
linux kernel 3.10
本文链接:https://blog.csdn.net/u012028275/article/details/118052249
这篇关于【C语言笔记】【宏定义系列】 两个数中的最小值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!