...
Code Block |
---|
|
#define EOF -1
/* // ... */
if (c EOF) {
/* // ... */
}
|
Wiki Markup |
---|
In this example, the programmer has mistakenly omitted the comparison operator (see \[[MSC02-A. Avoid errors of omission]\]) from the conditional statement, which should be {{c \!= EOF}}. After macro expansion, the conditional expression is incorrectly evaluated as a binary operation: {{c-1}}. This is syntactically correct, even though it is certainly not what the programmer intended. |
...
Code Block |
---|
|
#define EOF (-1)
/* // ... */
if (c != EOF) {
/* // ... */
}
|
Risk Assessment
Failure to use parenthesis around macro definitions that contain operators can result in unintended program behavior.
...