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'.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3008. |