Possible Duplicate:
is there an equivalent of std::swap() in c
Hi folks,
I was attempting a problem to write a generic swap macro in C and my macro looks like this:
#define swap(x,y) { x = x + y; y = x - y; x = x - y; }
It works fine for integers and floats but I am unsure if there is any catch in it. What if by generic macro they mean swapping pointers, characters etc ? Can anyone help me with writing a generic macro for swapping every input ?
Thanks
This works well only with integers.
For floats it will fail (e.g. try running it with a very large float and a very small one).
I would suggest something as follows:
#define swap(x,y) do \ { unsigned char swap_temp[sizeof(x) == sizeof(y) ? (signed)sizeof(x) : -1]; \ memcpy(swap_temp,&y,sizeof(x)); \ memcpy(&y,&x, sizeof(x)); \ memcpy(&x,swap_temp,sizeof(x)); \ } while(0)
memcpy is pretty optimized when the amount to copy is known at compilation time. Also, there's no need to manually pass a type name or use compiler specific extensions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With