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

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

The analyzer detected a potential error in an arithmetic or logical expression: a variable is used both in the left and the right parts of a compound-assignment expression. Consider the following example:

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

This code is likely to contain a typo and was probably meant to look like this:

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

Or like this:

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

It is true that programmers use expressions like these as a tricky means to multiply a number by two, but such code is strange and needs to be checked. Such expressions look rather complicated and probably should be rewritten in a simpler and clearer way:

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

There are also more suspicious expressions that need to be inspected:

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

This expression can be simplified in the following way:

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

It is not clear if this behavior is intended or caused by a typo. In any case, this code should be checked.

 You can look at examples of errors detected by the V765 diagnostic.

344
12 899