﻿# V559\. Suspicious assignment inside the condition expression of 'if/while/for' operator\.

Анализатор обнаружил ситуацию, когда в условии оператора 'if' или 'while' присутствует оператор присваивания '\='\. Подобная конструкция часто свидетельствует о наличии ошибок\. Высока вероятность, что вместо оператора '\=' планировалось использовать оператор '\=\='\.

Рассмотрим пример:

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

В коде допущена опечатка: вместо сравнения переменной 'x' c константной MAX\_X произойдет изменение значения переменной 'x'\. Корректный вариант кода:

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

Конечно, присваивание внутри условия часто ошибкой не является\. Такой приём используется многими программистами для сокращения размера кода\. Стоит отметить, что это плохая практика, так как работая с подобным кодом всегда подолгу приходится изучать его, чтобы понять: является ли он следствием опечатки или желанием сократить программу\.

Мы предлагаем отказаться от присваивания внутри условия и использовать присваивание в качестве отдельной операции\. Другой вариант \- использовать дополнительные скобки вокруг присваивания:

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

Подобный код анализатор и многие компиляторы воспринимают как безопасный\. Заодно, это подсказка человеку, что код не содержит ошибку\.