Previous: Assignment in Subexpressions, Up: Assignment Expressions [Contents][Index]
It is often convenient to write an assignment inside an
if-condition, but that can reduce the readability of the
program. Here’s an example of what to avoid:
if (x = advance (x)) …
The idea here is to advance
x and test if the value is nonzero.
However, readers might miss the fact that it uses ‘=’ and not
‘==’. In fact, writing ‘=’ where ‘==’ was intended
inside a condition is a common error, so GNU C can give warnings when
‘=’ appears in a way that suggests it’s an error.
It is much clearer to write the assignment as a separate statement, like this:
x = advance (x); if (x != 0) …
This makes it unmistakably clear that
x is assigned a new value.
Another method is to use the comma operator (see Comma Operator), like this:
if (x = advance (x), x != 0) …
However, putting the assignment in a separate statement is usually clearer unless the assignment is very short, because it reduces nesting.