The information in this article applies to:
SUMMARYOperator precedence in C affects how operands are grouped; it does not necessarily indicate the order in which operands are evaluated. The logical AND (&&) operator has a higher precedence than the logical OR (||) operator. Therefore, the statement:
is logically equivalent to the following:
However, this grouping does not indicate that the subexpression
(operand2 && operand3) will be evaluated first. In fact, this
statement is a logical OR expression with two operands: operand1 and
"(operand2 && operand3)." Because a logical OR expression evaluates
its operands in left-to-right order, operand1 is evaluated first.
MORE INFORMATIONThe following example demonstrates this behavior: Sample Code:
Program output:
Because "(b = 2)" is not 0, the result of the expression is TRUE (1)
and the code does not perform any further evaluations. Therefore, the
code does not perform the assignments to c and d. To ensure that
values are always assigned to the variables, use separate assignment
statements.
As Kernighan and Ritchie note on page 54 of "The C Programming Language" (second edition), "The moral is that writing code that depends on the order of evaluation is a bad programming practice in any language." Additional query words:
Keywords : kbLangC kbVC100 kbVC150 kbVC151 kbVC152 kbVC200 kbVC210 kbVC400 kbVC500 kbVC600 |
Last Reviewed: July 6, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |