#define SWAP(a,b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
En 2005, Iain A. Fleming apunto que este metodo no funciona si las 2 variables a intercambiar tienen la misma direccion de memoria, por ejemplo SWAP(a[i], a[j]) si i == j.
Una solucion es definir la macro como:
(((a) == (b)) || (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b))))
Es decir:
(((a) == (b)) || ((a) ^= (b) ^= (a) ^= (b)))
Por cierto, en Perl podemos hacerlo asi:
($a, $b) = ($b, $a);
0 comentarios :
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.