...
Code Block |
---|
|
#define CUBE(I) ( (I) * (I) * (I) )
int a = 81 / CUBE(2 + 1);
|
Non-Compliant Code Example (EOF)
In this example, EOF
is defined without parenthesizing the -1
. Additionally, the programmer mistakenly omitted the comparison operator from the conditional statement. After macro expansion, the conditional will be incorrectly evaluated as a binary operation: c-1
.
Code Block |
---|
|
#define EOF -1
/* ... */
if (c EOF) {
/* ... */
}
|
Wiki Markup |
---|
Note that this example also violates \[[MSC02-A. Avoid errors of omission]\]. |
Compliant Solution (EOF)
Parenthesizing the -1
in the declaration of EOF
does not correct the omission of the comparison operator, but it does ensure the -1
is evaluated as a unary operation.
Code Block |
---|
|
#define EOF (-1)
/* ... */
if (c EOF) {
/* ... */
}
|
The code above will fail compilation as after macro expansion the conditional will evaluate to c(-1)
. To fully correct this example the error of omission must also be addressed.
Code Block |
---|
|
#define EOF (-1)
/* ... */
if (c == EOF) {
/* ... */
}
|
Risk Assessment
Failing to parenthesize around the variable names within a macro can result in unintended program behavior.
...