两个数字中的最小值的 C 宏

标签 c c-preprocessor minimum

我想用#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/

相关文章:

c - Bash 扩展在 popen 中不起作用

c - 如何在同一个 "call stack"中使用宏列表两次?

c - 与类对象宏同名的类函数宏

smoothing - 与仅在 Modelica 中定义连续导数函数 C0 相比,有什么优势?

android - 如何更改 Android Gallery 中的最小滑动距离?

c - 函数参数中的字符串

从外部更改变量

c++ - C中的MAX和MIN是什么? #定义函数

c++ - 从包含打破其他先前包含定义

html - 定义背景图像的最小宽度