【发布时间】:2021-06-27 10:22:17
【问题描述】:
我想创建类似strcmp 的接口来比较数字,例如,ncmp(x, y) 如果x > y 返回一个int > 0,0 如果x = y,< 0 如果x < y 在C(不是 C++)。
虽然我一定不想限制类型,但我的主要兴趣是比较signed long ints 和doubles。 “接口”可以是tgmath.h 中的宏,也可以是(一组)函数。我希望所有 signed long int 和 double 对都能正常工作;例如,(signed long int, double) 和 (double, double) 应该可以工作。
我目前使用的是以下宏:
#define ncmp(x, y) ((x) > (y)) - ((x) < (y))
这个幼稚的宏有什么陷阱吗? 有没有更好、更强大的解决方案来比较数字?
任何帮助将不胜感激!
【问题讨论】:
-
这不就是
x -y吗? -
c支持一种叫做 functions 的东西;) -
为什么不简单使用
if (x < <y) ...? -
@stark
x - y如果x和y有相反的符号,则可能溢出。此外,它仅适用于那些被提升为int的无符号类型。 -
一些针对提出解决方案的人的测试用例:
ncmp(0u, 1u)、ncmp(MIN_INT, 1)。
标签: c precision strcmp arithmetic-expressions tgmath