﻿# V7013\. Suspicious assignment in the condition\. A comparison may have been intended\.

Анализатор обнаружил присваивание в условии\. Скорее всего, вместо присваивания подразумевался оператор сравнения\.

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

```cpp
function foo() {
  let mode = ....;

  if (mode = 1) {  // <=
    return; 
  } 
  ....
}
```

В коде допущена опечатка: вместо сравнения переменной `mode` с единицей происходит присваивание значения\. В итоге из\-за опечатки условие всегда будет истинно, и код не будет работать так, как изначально предполагалось\.

Корректный вариант кода выглядит следующим образом:

```cpp
if (mode == 1) {
  ....
}
```

В некоторых случаях присваивание внутри условия может быть использовано для сокращения размера кода: 

```cpp
let result = ....; 
while (result = exec()) {
  ....
}
```

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

Если всё же требуется выполнить присваивание в условии, можно дополнительно заключить его в скобки:

```cpp
while ((result = exec()))
  ....
```

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

![V7013_ru/image1.png](https://import.viva64.com/docx/blog/V7013_ru/image1.png)

Вы нашли спрятанный ссееккрреетт и, возможно, успеете забрать один из ппррииззоовв\. [Подробнее](https://pvs-studio.ru/ru/rules/)\.