小编典典

C中的最小值和最大值

all

如果有的话,在 C中定义MIN和定义在哪里?MAX

实现这些的最佳方法是什么,尽可能通用并尽可能安全地输入?(首选主流编译器的编译器扩展/内置。)


阅读 88

收藏
2022-03-28

共1个答案

小编典典

如果有的话,在 C中定义MIN和定义在哪里?MAX

他们不是。

实现这些的最佳方法是什么,尽可能通用且类型安全(首选主流编译器的编译器扩展/内置)。

作为函数。我不会使用宏#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)),尤其是如果您打算部署代码。要么自己编写,要么使用标准fmax或之类的东西,或者在GCC
语句表达式中使用
GCC 的
typeof
(你也获得类型安全奖励)fmin来修复宏:

 #define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

每个人都说“哦,我知道双重评估,这没问题”,几个月后,您将连续数小时调试最愚蠢的问题。

注意使用__typeof__代替typeof

如果您正在编写包含在 ISO C 程序中时必须工作的头文件,请编写__typeof__而不是 typeof.

2022-03-28