When defining macros, put parentheses around all variable names. This ensures that the macro is evaluated in a predictable manner.
Non-Compliant Code Example
Code Block |
---|
#define PRODUCT(A,B) A * B int a = PRODUCT(3+4, 5) |
PRODUCT(3+4, 5)
is converted to 3+4 * 5
by the preprocessor, which the compiler intreprets as 3+(4*5) = 23
. Presumably, this does not match the intended behavior of the macro, which is (3+4) * 5 = 35
.
Compliant Solution
Code Block |
---|
#define PRODUCT(A,B) (A) * (B) int a = PRODUCT(3+4, 5) |
By adding parentheses around each argument, this macro (correctly) evaluates to 35.