如果有的话,在 C中定义MIN和定义在哪里?MAX
MIN
MAX
实现这些的最佳方法是什么,尽可能通用并尽可能安全地输入?(首选主流编译器的编译器扩展/内置。)
他们不是。
实现这些的最佳方法是什么,尽可能通用且类型安全(首选主流编译器的编译器扩展/内置)。
作为函数。我不会使用宏#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)),尤其是如果您打算部署代码。要么自己编写,要么使用标准fmax或之类的东西,或者在GCC 语句表达式中使用GCC 的 typeof(你也获得类型安全奖励)fmin来修复宏:
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
fmax
fmin
#define max(a,b) \ ({ __typeof__ (a) _a = (a); \ __typeof__ (b) _b = (b); \ _a > _b ? _a : _b; })
每个人都说“哦,我知道双重评估,这没问题”,几个月后,您将连续数小时调试最愚蠢的问题。
注意使用__typeof__代替typeof:
__typeof__
typeof
如果您正在编写包含在 ISO C 程序中时必须工作的头文件,请编写__typeof__而不是 typeof.