【C语言】比较2个数和3个数大小

最高级的写法在 kernel/include/linux/kernel.h

考虑三目运算符,宏替换语句导致错误语法逻辑,语句表达式,运算符优先级,++导致的参数变化,类型检查。

看了让人赞叹
#define min(x, y) ({            \
                                \
    typeof(x)  _min1 = (x);     \
    typeof(y)  _min2 = (y);     \
    (void)(&_min1 == &_min2);   \
    _min1 < _min2 ? _min1 : _min2; })

#define max(x, y) ({             \
    typeof(x)    _max1 = (x);    \
    typeof(y)    _max2 = (y);    \
    (void)(&_max1 == &_max2);    \
    _max1 > _max2 ? _max1 : _max2;    })


#define min3(x, y, z)    ({            \
    typeof(x)    _min1 = (x);          \
    typeof(y)    _min2 = (y);          \
    typeof(x)    _min3 = (z);          \
    (void)(_min1 == &_min2);           \
    (void)(_min1 == &_min3);           \
    _min1 < _min2 ? (_min1 < _min3 ? _min1 : min3) :    \
        (_min2 < _min3 ? _min2 : _min3);        })

#define max3(x, y, z) ({                \
    typeof(x)      _max1 = (x);         \
    typeof(y)      _max2 = (y);         \
    typeof(z)      _max3 = (z);         \
    (void)(&_max1 == &_max2);           \
    (void)(&_max1 == &_max3);           \
    _max1 > _max2 ? (_max1 > _max3 ? _max1 :_max3):    \
        (_max2 > _max3) ? (_max2 : _max3);    })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值