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:
|