我想用#define 制作一个简单的宏,用于返回两个数字中较小的一个。
我如何在 C 中执行此操作?提出一些想法,看看您是否也可以使它更加混淆。
最佳答案
通常:
#define min(a, b) (((a) < (b)) ? (a) : (b))
请注意,这会评估最小值两次,这是 recent question 中出现灾难的原因.
但是为什么要混淆它呢?
这个将结果存储在一个变量中,并且只对每个参数求值一次。它基本上是一个穷人内联函数 + 声明:
#define min(t, x, a, b) \
t x; \
{ \
t _this_is_a_unique_name_dont_use_it_plz_0_ = a; \
t _this_is_a_unique_name_dont_use_it_plz_1_ = b; \
x = _this_is_a_unique_name_dont_use_it_plz_0_ < \
_this_is_a_unique_name_dont_use_it_plz_1_ ? \
_this_is_a_unique_name_dont_use_it_plz_0_ : \
_this_is_a_unique_name_dont_use_it_plz_1_ ; \
}
像这样使用它:
min(int, x, 3, 4)
/* x is an int, equal to 3
Just like doing:
int x = min(3, 4);
Without double evaluation.
*/
关于两个数字中的最小值的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458723/