That's why in C++ people seem to generally recommend inline functions instead. Not only do the arguments only get evaluated once, but the whole thing is type safe too.
Macros, by definition, are always misused, complete the languages point of view. They exist to let the programmer get the job done when the language falls short.
Of course, people still misuse macros.