Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V570. Variable is assigned to itself.

08 Авг 2019

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

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

dst.m_a = src.m_a;
dst.m_b = dst.m_b;

Из-за опечатки значение переменной dst.m_b не изменится. Исправленный вариант кода:

dst.m_a = src.m_a;
dst.m_b = src.m_b;

Анализатор выдаёт предупреждение не только на копирующее присваивание, но и на перемещающее.

Пример:

dst.m_a = std::move(src.m_a);

Анализатор не всегда выдаёт предупреждение, если встречает присваивание переменной самой себе. Например, если переменные взяты в скобки. Подобный приём часто используется для подавления предупреждений компилятора.

Пример:

int Foo(int foo)
{
  UNREFERENCED_PARAMETER(foo);
  return 1;
}

Макрос UNREFERENCED_PARAMETER объявлен в файле WinNT.h следующим образом:

#define UNREFERENCED_PARAMETER(P)          \
  { \
      (P) = (P); \
  }

Анализатор распознаёт такие ситуации и не выдаст предупреждение V570 на присваивание следующего вида:

(foo) = (foo);

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

//V_WARN_ON_ARGUMENT_SELF_ASSIGN

Примечание. Если предупреждение V570 относится к макросам, которые нельзя исправить, то можно воспользоваться механизмом подавления предупреждений в макросах. Достаточно написать специальный комментарий в файле, используемом во всём проекте (например, в StdAfx.h).

Пример:

//-V:MY_MACROS:V570

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

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