你的宏定义看起来已经很接近标准了。以下是一个改进后的标准MIN
宏定义,它可以正确处理多种数据类型并避免潜在的副作用问题:
#define MIN(a, b) \
({ __typeof__(a) _a = (a); __typeof__(b) _b = (b); \
_a <= _b ? _a : _b; })
这个宏使用了 GNU C 的嵌入式语法,可以在 Expression 中安全地评估输入,同时避免了可能的副作用。它首先将参数 a
和 b
存储在局部变量 _a
和 _b
中,然后比较它们并返回较小的一个。
如果你不需要 GNU 扩展,可以使用更简单的版本,但请注意在使用宏时避免副作用:
#define MIN(a, b) ((a) < (b) ? (a) : (b))
在这个版本中,每次调用 MIN
时,a
和 b
的表达式会被求值两次,可能会导致副作用。使用时注意这一点。