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

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

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

```cpp
void foo(bool b1, bool b2)
{
  if (b1 = b2)
  ....
```

В коде допущена опечатка\. Вместо сравнения переменных b1 и b2, в коде произойдет изменение значения переменной b1\. Корректный вариант кода:

```cpp
if (b1 == b2)
```

Если в конструкции 'if' необходимо сделать присвоение, для сокращения кода, то рекомендуется оборачивать присвоение в круглые скобки\. Обертывание присваивания в дополнительные скобки \- это распространенный паттерн программирования, описываемый в книгах и распознаваемый различными компиляторами и анализаторами кода\.

Условие с дополнительными скобками подсказывает программисту и анализаторам кода, что никой ошибки нет:

```cpp
if ((b1 = b2))
```

Более того, дополнительное обертывание в скобки не только делают код более читабельным, но и убережет от ошибок приоритета операций, как в следующим примере:

```cpp
if ((a = b) || a == c)
{ }
```

Если бы не было скобок, то, согласно приоритету операций, сначала выполнилась бы часть 'b \|\| a \=\= c', а после результат выполнения выражения присвоился бы переменной 'a'\. Это поведение могло оказаться вовсе не таким, как задумывал программист\.