加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何写一个’clamp’/’clip’/’bound’宏来返

发布时间:2020-12-16 03:18:43 所属栏目:百科 来源:网络整理
导读:我经常发现自己在写东西 int computedValue = ...;return MAX(0,MIN(5,computedValue)); 我想把它写成一个单行宏.它必须没有副作用,与现有的系统宏MIN和MAX相同,并且应适用于与MIN和MAX相同的数据类型. 有谁能告诉我如何把它变成一个宏? 解决方法 这是没有
我经常发现自己在写东西
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_HIGH,BOUNDS,CLIPPED.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读