# V559. Suspicious assignment inside the conditional expression of 'if/while/for' statement.

The analyzer detected an issue that has to do with using the assignment operator '=' in the conditional expression of an 'if' or 'while' statement. Such a construct usually indicates the presence of a mistake. It is very likely that the programmer intended to use the '==' operator instead of '='.

Consider the following example:

    const int MAX_X = 100;
    int x;
    ...
    if (x = MAX_X)
    { ... }

There is a typo in this code: the value of the 'x' variable will be modified instead of being compared with the constant MAX_X:

    if (x == MAX_X)
    { ... }

Using assignments inside conditions is not always an error, of course. This technique is used by many programmers to make code shorter. However, it is a bad style because it takes a long time to find out if such a construct results from a typo or the programmer's intention to make the code shorter.

Instead of using assignments inside conditional expressions, we recommend implementing them as a separate operation or enclosing them in additional parentheses:

    while ((x = Foo()))
    {
      ...
    }

Code like this will be interpreted by both the analyzer and most compilers as correct. Besides, it tells other programmers that there is no error here.

This diagnostic is classified as:

CWE-481 CERT-EXP45-C

You can look at examples of errors detected by the V559 diagnostic.