...
When multiple statements are used in a macro, they should be bound together in a a do-while
loop syntactically, so the macro can appear safely inside inside if
clauses or other places that expect a single statement or a statement block. (Alternatively, when an if
, for
, or while
statement uses braces even for a single body statement, then multiple statements in a macro will expand correctly even without a a do-while
loop. See EXP19-C. Use braces for the body of an if, for, or while statement.
...
The problem is the semicolon (
) following the block.;
Compliant Solution
Wrapping the macro inside a a do-while
loop mitigates the problem.
Code Block | ||||
---|---|---|---|---|
| ||||
/* * Swaps two values. * Requires tmp variable to be defined. */ #define SWAP(x, y) \ do { \ tmp = x; \ x = y; \ y = tmp; } \ while (0) |
The The do-while
loop will always be executed exactly once.
...