是否有相当标准的 C (Linux) 函数或代码效率高但性能良好的方法来比较任意大小的两个整数?
我正在寻找具有int intcmp(const void *a, const void *b, size_t size)
适用于整数a
和b
任何实际大小的参数的东西size
。(memcmp()
如果架构是大端的,会工作(我认为)。)
我倾向于使用的实现是这样的(通过Efficient integer compare function的改进),但它不是完全通用的,并且有足够的代码开销,我通常在插入它之前会三思而后行。
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;
}