﻿# V570\. Variable is assigned to itself\.

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

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

```cpp
dst.m_a = src.m_a;
dst.m_b = dst.m_b;
```

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

```cpp
dst.m_a = src.m_a;
dst.m_b = src.m_b;
```

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

Пример:

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

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

Пример:

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

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

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

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

```cpp
(foo) = (foo);
```

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

```cpp
//V_WARN_ON_ARGUMENT_SELF_ASSIGN
```

**Примечание\.** Если предупреждение V570 относится к макросам, которые нельзя исправить, то можно воспользоваться механизмом [подавления предупреждений](https://pvs-studio.ru/ru/docs/manual/0017/) в макросах\. Достаточно написать специальный комментарий в файле, используемом во всём проекте \(например, в [`StdAfx.h`](https://pvs-studio.ru/ru/blog/posts/cpp/0265/)\)\. 

Пример:

```cpp
//-V:MY_MACROS:V570
```