【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
", min(a, b));
    
    return 0;
}

实现过程

  1. typeof(x) _min1 = (x) 使用一个与参数x相同数据类型的临时变量_min1来保存参数x的值,避免类似自增或自减带来的影响。
  2. typeof(y) _min2 = (y) 使用一个与参数y相同数据类型的临时变量_min2来保存参数y的值,避免类似自增或自减带来的影响。
  3. (void) (&min1 == &min2) 这个用于检测这个宏里的两个参数的数据类型是否相同,如果不相同,则编译器就会出现警告提示。
  4. _min1 < _min2 ? _min1 : _min2 比较两个数哪一个比较小,返回较小数的数值。

[参考资料]

linux kernel 3.10


本文链接:https://blog..net/u012028275/article/details/118052249

经验分享 程序员 微信小程序 职场和发展