The analyzer has detected a potential error in a condition. The program must perform different actions depending on which range of values a certain variable meets.
For this purpose, the following construct is used in the code:
if ( MIN_A < X && X < MAX_A ) { .... } else if ( MIN_B < X && X < MAX_B ) { .... }
The analyzer generates the warning when the ranges checked in conditions overlap. For example:
if ( 0 <= X && X < 10) FooA(); else if ( 10 <= X && X < 20) FooB(); else if ( 20 <= X && X < 300) FooC(); else if ( 30 <= X && X < 40) FooD();
The code contains a typo. The programmer's fingers faltered at some moment and he wrote "20 <= X && X < 300" instead of "20 <= X && X < 30" by mistake. If the X variable stores, for example, the value 35, it will be the function FooC() that will be called instead of FooD().
The fixed code:
if ( 0 <= X && X < 10) FooA(); else if ( 10 <= X && X < 20) FooB(); else if ( 20 <= X && X < 30) FooC(); else if ( 30 <= X && X < 40) FooD();
Here is another example:
const int nv_ab = 5; const int nv_bc = 10; const int nv_re = 15; const int nv_we = 20; const int nv_tw = 25; const int nv_ww = 30; .... if (n < nv_ab) { AB(); } else if (n < nv_bc) { BC(); } else if (n < nv_re) { RE(); } else if (n < nv_tw) { TW(); } // <= else if (n < nv_we) { WE(); } // <= else if (n < nv_ww) { WW(); }
Depending on the value of the 'n' variable, different actions are performed. Poor variable naming may confuse a programmer - and so it did in this example. The 'n' variable should have been compared to 'nv_we' first and only then to 'nv_tw'.
To make the mistake clear, let's substitute the values of the constants into the code:
if (n < 5) { AB(); } else if (n < 10) { BC(); } else if (n < 15) { RE(); } else if (n < 25) { TW(); } else if (n < 20) { WE(); } // Condition is always false else if (n < 30) { WW(); }
The fixed code:
if (n < nv_ab) { AB(); } else if (n < nv_bc) { BC(); } else if (n < nv_re) { RE(); } else if (n < nv_we) { WE(); } // <= else if (n < nv_tw) { TW(); } // <= else if (n < nv_ww) { WW(); }
This diagnostic is classified as:
You can look at examples of errors detected by the V695 diagnostic. |