﻿# V3008\. The 'x' variable is assigned values twice successively\. Perhaps this is a mistake\.

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

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

```cpp
A = GetA();
A = GetB();
```

То, что переменной 'A' два раза присваивается значение, может свидетельствовать о наличии ошибки\. Высока вероятность, что код должен выглядеть следующим образом:

```cpp
A = GetA();
B = GetB();
```

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

```cpp
A = 1;
A = Foo(A);
```

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

```cpp
....
if (bool.TryParse(setting, out value))
    _singleSignOn = value;
_singleSignOn = false;
....
```

Корректный вариант должен был выглядеть так:

```cpp
....
if (bool.TryParse(setting, out value))
    _singleSignOn = value;
else
     _singleSignOn = false;
....
```

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

```cpp
status = Foo1();
status = Foo2();
```

В данной ситуации:

* Можно подавить ложные срабатывания, используя комментарий "//\-V3008"\.
* Можно запретить выдавать диагностику V3008 для всех случае, где используется переменная с именем 'status'\. Для этого можно добавить комментарий "//\-V:status:3008"\.
* Можно убрать из кода ничего не значащие присваивания\. 
* Возможно этот код все же некорректен, и необходимо проверять значение переменной 'status'\.