是否有一个相当标准的C(Linux)函数,或者一个代码有效但性能良好的方法,用于比较任意大小的两个整数?
我正在寻找一些int intcmp(const void *a, const void *b, size_t size)
适用于整数a
和b
任何实际尺寸的参数size
.(memcmp()
如果架构是大端的话,我会工作(我认为).)
我倾向于使用的实现是这样的(有效整数比较函数的改进),但它不是完全通用的,并且有足够的代码开销,我通常会在插入之前三思而后行.
int intcmp(const void *a, const void *b, size_t size) {
#define CASE_SIZE_RETURN_A_B_CMP(_t) \
case sizeof(_t): \
return ((*(_t *)(a) > *(_t *)(b)) - (*(_t *)(a) < *(_t *)(b)))
switch (size) {
CASE_SIZE_RETURN_A_B_CMP(char);
CASE_SIZE_RETURN_A_B_CMP(short);
CASE_SIZE_RETURN_A_B_CMP(int);
CASE_SIZE_RETURN_A_B_CMP(long long);
}
#undef CASE_SIZE_RETURN_A_B_CMP
assert(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)