An assignment expression can appear inside an if condition:
if (x = getval() ) { // do someting }
The if condition is evaluated in two steps: first, the unconditional assignment to x takes place. Then, x is checked. The if block is executed only if x’s value (after the assignment) isn’t zero. Although this technique can save you a few keystrokes, it’s highly dangerous and should be avoided. The problem is that one can easily mistake == for = or vice versa. For this reason, several compilers issue a warning message if you place an assignment expression inside an if condition, to draw your attention to a potential bug. If you need to assign a value and test the result, separate these two steps into two distinct statements as follows:
x = getval(); if (x) { // do someting }
This way, you document your intention more clearly and avoid this potential bug.