Recientemente escribí un programa que ordena una matriz. Para ello, necesitaba escribir una función de comparación, que pasaré a ella. Mi función de comparación debería haber devuelto 1 (si x> y), -1 (si x <y) o 0 (si x = y). Escribí una función regular (Función 1) usando expresiones condicionales, pero me aconsejaron que escribiera de manera diferente (Función 2). ¿Es mejor escribir así? ¿Una condición booleana siempre devolverá 1 para la verdad? (Quiero decir, si x = 0 e y = 0 siempre tendremos (x == y) == 1?)
Función 1:
int Icmp(void* x, void* y)
{
int a = *(int*)x;
int b = *(int*)y;
if (a > b)
return 1;
else if (a < b)
return -1;
else
return 0;
}
Función 2:
int Icmp(void* x, void* y)
{
return (*(int*)x > * (int*)y) - (*(int*)x < *(int*)y);
}