Существует ли стандартная функция C (Linux) или эффективный с точки зрения кода, но эффективный подход для сравнения двух целых чисел произвольного размера?
Я ищу что-то с параметрами int intcmp(const void *a, const void *b, size_t size)
, которые работают с целыми числами a
и b
для любого практического размера size
. (memcmp()
будет работать (я думаю), если архитектура была большой endian.)
Реализация, которую я обычно использую, выглядит следующим образом (с улучшением Эффективная функция сравнения целого числа), но она не является полностью общей и имеет достаточное количество служебных данных кода, которые я обычно дважды подумайте, прежде чем вставлять его.
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;
}