# V6057. Consider inspecting this expression. The expression is excessive or contains a misprint.

The analyzer has detected a redundant comparison that could be a potential bug.

Consider the following simple example:

    if (arr[42] == 10 && arr[42] != 3)

This condition will be true if 'Aa[42] == 10'. The second part of the expression is pointless. It means that one of the two scenarios takes place here:

1) The expression can be simplified. Fixed code:

    if (arr[42] == 10)

2) The expression is incorrect. Fixed code:

    if (arr[42] == 10 && arr[43] != 3)

Here is another example with a suspicious condition:

    if ((3 < value) && (value > 10))

The condition will be true only when 'value > 10'. This will most likely mean an error, and the programmer must have actually expected 'value' to fall into the range (3;10):

    if ((3 < value) && (value < 10))

The following article discusses this type of issues in detail and offers a few tips on how to avoid them: "Logical Expressions in C/C++. Mistakes Made by Professionals".

This diagnostic is classified as:

CWE-571 CERT-MSC57-J