Анализатор обнаружил потенциальную ошибку в условии. Программа должна совершать различные действия, в зависимости от того, в какой диапазон значений попадает некая переменная.
Для этого в коде используется следующая конструкция:
if ( MIN_A < X && X < MAX_A ) { .... } else if ( MIN_B < X && X < MAX_B ) { .... }
Анализатор выдаёт предупреждение, если диапазоны, проверяемые в условиях, пересекаются. Пример:
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();
Код содержит опечатку. Рука программиста дрогнула, и вместо условия "20 <= X && X < 30" была написано "20 <= X && X < 300". Если переменная X будет хранить, например, значение 35, то будет вызвана функция FooC(), а не FooD().
Исправленный код:
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();
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3092. |