V3107. Identical expression to the left and to the right of compound assignment.
Анализатор обнаружил одинаковые подвыражения в левой и правой части составного оператора присваивания (compound assignment operator). Возможно эта операция содержит ошибку, не имеет смысла, либо может быть упрощена.
Рассмотрим пример. Пусть у нас имеется выражение следующего вида:
x += x + 5;
Возможно программист хотел просто прибавить к переменной 'x' значение 5. Тогда корректный код может выглядеть так:
x = x + 5;
Либо же программист хотел прибавить 5, но случайно добавил лишнюю переменную 'x' в выражение. Тогда корректный код может выглядеть так:
x += 5;
Впрочем, возможно код написан правильно. Однако согласитесь, читать такое выражения сложно и лучше переписать его. Более читабельный вариант может выглядеть так:
x = x * 2 + 5;
Рассмотрим следующий пример:
x += x;
Данная операция эквивалентна операции умножения на два. Более понятное выражение будет иметь следующий вид:
x *= 2;
Рассмотрим еще одно выражение:
y += top - y;
Мы пытаемся прибавить переменной 'y' разницу между переменной 'top' и переменной 'y'. Давайте разложим данное выражение:
y = y + top – y;
Данное выражение можно упростить, так как переменная 'y' вычитается сама из себя, что является бессмысленным. Тогда простой и корректный код будет выглядеть так:
y = top;
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3107. |