Did you try inline as well? Why are they not as flexible as the macro? Couldn't the swap not also process two arrays?
I guess you're right, since the function accepts a void pointer, it could also point to an array of two array pointers. So yes, it can also process two arrays.