std*_*all 3 c macros coding-style
定义一个 between 宏的最佳方法是什么,它是泛型类型 (char,int,long),如果一个数字介于输入的其他数字之间,它将返回 true。我试图用谷歌搜索它,但我没有找到任何东西。
编辑:给出的两个边界的顺序无关紧要。所以它可以更通用。
如果您执行以下操作:
#define BETWEEN(a, b, c) (((a) >= (b)) && ((a) <= (c)))
Run Code Online (Sandbox Code Playgroud)
你会对 的双重评估有问题a。想想如果你用一个有副作用的函数来做会发生什么......
你应该做一些类似的事情:
#define BETWEEN(a, b, c) ({ __typeof__ (a) __a = (a); ((__a) >= (b) && ((__a) <= (c)) })
Run Code Online (Sandbox Code Playgroud)
(编辑是因为结果不应该取决于 b 和 c 的顺序):
#define BETWEEN(a, b, c) \
({ __typeof__ (a) __a = (a);\
__typeof__ (b) __b = (b);\
__typeof__ (c) __c = (c);\
(__a >= __b && __a <= __c)||\
(__a >= __c && __a <= __b)})
Run Code Online (Sandbox Code Playgroud)