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

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

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

    A = GetA();
    A = GetB();

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

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

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

    A = 1;
    A = Foo(A);

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

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

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

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

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

    status = Foo1();
    status = Foo2();

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

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

Данная диагностика классифицируется как:

CWE-563

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3008.