Versions Compared

Key

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

...

Code Block
bgColor#ccccff
#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
bgColor#FFcccc

#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
bgColor#ccccff

#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
bgColor#ccccff

#define EOF (-1)
/* ... */
if (c == EOF) {
   /* ... */
}

Risk Assessment

Failing to parenthesize around the variable names within a macro can result in unintended program behavior.

...