V765. A compound assignment expression 'X += X + N' is suspicious. Consider inspecting it for a possible error.

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

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

void Foo(int x, int y, int z)
{
  x += x + y;
  ....
}

Возможно, что здесь допущена опечатка, и правильный код должен выглядеть так:

void Foo(int x, int y, int z)
{
  x = x + y;
  ....
}

Или так:

void Foo(int x, int y, int z)
{
  x += z + y;
  ....
}

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

void Foo(int x, int y, int z)
{
  x = x * 2 + y;
  ....
}

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

void Foo(int x, int y)
{
  x -= x + y;
}

Данное выражение можно упростить следующим образом:

  • x -= x + y;
  • x = x - (x + y);
  • x = -y;

Не понятно, является ли такое поведение преднамеренным или же это опечатка. В любом случае, этот код следует проверить.

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

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


Найденные ошибки

Проверено проектов
411
Собрано ошибок
14 123

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять