当前位置 博文首页 > dadalaohua的博客:【C语言笔记】【宏定义系列】 两个数中的最大

    dadalaohua的博客:【C语言笔记】【宏定义系列】 两个数中的最大

    作者:[db:作者] 时间:2021-07-11 10:10

    【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;
    }
    

    实现过程

    1. typeof(x) _max1 = (x)

      使用一个与参数x相同数据类型的临时变量来保存参数x的值,避免类似于自增或自减带来的影响。

    2. typeof(y) _max2 = (y)

      使用一个与参数y相同数据类型的临时变量来保存参数y的值,避免类似于自增或自减带来的影响。

    3. (void) (&_max1 == &_max2)

      这一句代码用于检测这个宏里的两个参数的数据类型是否相同,如果类型不相同,则编译器就会出现警告提示。

    4. _max1 > _max2 ? _max1 : _max2

      比较_max1_max2这两个数哪一个比较大,返回较大数的数值。

    [参考资料]

    linux kernel 3.10


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

    cs