...
Some implementations provide language extensions that make it possible to define safe function-like macros, such as the macro ABS()
, that would otherwise require evaluating their arguments more than once. For example, the GCC extension Statements and Declarations in Expressions makes it possible to implement the macro ABS()
in a safe way. Note, however, that since because relying on implementation-defined extensions introduces undesirable platform dependencies that may make the resulting code nonportable, such solutions should be avoided in favor of portable ones wherever possible. (See MSC14-C. Do not introduce unnecessary platform dependencies.)
...