Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 getchar() != EOF. After macro expansion, the conditional expression is incorrectly evaluated as a binary operation: getchar()-1. This is syntactically correct, even though it is certainly not what the programmer intended. Note that this example also violates DCL00-A. Declare immutable values using enum or const.

Parenthesizing the -1 in the declaration of EOF ensures that the macro expansion is evaluated correctly. Note that this example also violates DCL00-A. Declare immutable values using enum or const.

Code Block
#define EOF (-1)

...