 
                            ...
The documentation for unsafe macros must warn about putting side effects on the invocation, but the responsibility is on the programmer using the macro. Because of the risks associated with their use, it is recommended that you avoid the creation of unsafe macro functions . See also VOID (see PRE00-A. Prefer inline or static functions to function-like macros]).
The assert() macro is an excellent example of an unsafe macro. Its argument may be evaluated once or not at all, depending on the NDEBUG macro. For more information, see EXP39-C. Avoid side effects in assertions.
...
Note the comment declaring the macro unsafe as a warning for programmers. Alternatively, the macro could be renamed ABS_UNSAFE() to make it painfully apparent that the macro is unsafe. However, a preferable, compliant solution is to declare ABS() as an inline function (see VOID PRE00-A. Prefer inline or static functions to function-like macros).
...