An unsafe macro function is one that evaluates a parameter more than once in the code expansion, or never evaluates the parameter at all. Never invoke an unsafe macro with arguments containing an assignment, increment, decrement, volatile access, input/output, or other side effects (including function calls, which may cause side effects).
...
One problem with unsafe macros is side effects on macro arguments, as shown by this non-compliant code example.
...