An unsafe function-like macro is one that, when expanded, evaluates its argument more than once or doesn't evaluate it at all. Due to the difference Contrasted with function calls, which always evaluate each of their arguments exactly once, unsafe function-like macros often have unexpected and surprising effects and lead to subtle, hard to find defects (see PRE31-C. Avoid side-effects in arguments to unsafe macros). ThusConsequently, every function-like macro should evaluate each of its arguments exactly once. Alternatively and preferably, defining function-like macros should be avoided in favor of inline functions (see PRE00-C. Prefer inline or static functions to function-like macros).
...