This is an old revision of the document!
Links
Preprocessor (PRE)
2.1 PRE30-C. Do not create a universal character name through concatenation
2.2 PRE31-C. Avoid side effects in arguments to unsafe macros
An unsafe function-like macro is one whose expansion results in evaluating one of its parameters more than once or not at all.
#define ABS(x) (((x) < 0) ? -(x) : (x)) /* UNSAFE */
void func(int n) {
/* Validate that n is within the desired range */
++n;
int m = ABS(n);
/* ... */
}