gpt4 book ai didi

objective-c - 如何编写 'clamp'/'clip'/'bound' 宏以返回给定范围内的值?

转载 作者:太空狗 更新时间:2023-10-30 03:27:40 25 4
gpt4 key购买 nike

我经常发现自己在写类似的东西

int computedValue = ...;
return MAX(0, MIN(5, computedValue));

我希望能够将它写成一个单行宏。它必须没有副作用,就像现有系统宏 MIN 和 MAX 一样,并且应该适用于与 MIN 和 MAX 相同的数据类型。

谁能告诉我如何把它变成一个宏?

最佳答案

这没有副作用,适用于任何原始数字:

#define MIN(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
#define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })

#define CLAMP(x, low, high) ({\
__typeof__(x) __x = (x); \
__typeof__(low) __low = (low);\
__typeof__(high) __high = (high);\
__x > __high ? __high : (__x < __low ? __low : __x);\
})

可以这样使用

int clampedInt = CLAMP(computedValue, 3, 7);
double clampedDouble = CLAMP(computedValue, 0.5, 1.0);

代替 CLAMP 的其他建议名称可以是 VALUE_CONSTRAINED_LOW_HIGHBOUNDSCLIPPED

关于objective-c - 如何编写 'clamp'/'clip'/'bound' 宏以返回给定范围内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14769603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com