Machine-translated by Google. Questions are authored in English.
Top

Discussion

Why is this macro dangerous?

#define SQ(x) x * x

  • A.without parentheses, SQ(a + b) expands wrongly
  • B.it cannot be used with a floating point argument
  • C.it evaluates its argument only once
  • D.it will not compile in a conforming implementation

Answer: A

Correct answer: without parentheses, SQ(a + b) expands wrongly

The expansion is a + b * a + b, which by precedence is a + (b*a) + b rather than the square of the sum. Every macro parameter and the whole macro body need parentheses. Note also that this macro evaluates its argument twice, which is a separate hazard.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.