Анализатор обнаружил потенциальную ошибку связанную с тем, что одна из ветвей оператора switch() никогда не получит управление. Причина этого в том, что аргумент оператора switch() не может принять значение, которое прописано в операторе case.
Рассмотрим пример:
char ch = strText[i]; switch (ch) { case '<': strHTML += "<"; bLastCharSpace = FALSE; nNonbreakChars++; break; case '>': strHTML += ">"; bLastCharSpace = FALSE; nNonbreakChars++; break; case 0xB7: case 0xBB: strHTML += ch; strHTML += "<wbr>"; bLastCharSpace = FALSE; nNonbreakChars = 0; break; ... }
Здесь ветка расположенная после "case 0xB7:" и "case 0xBB:" никогда не получит управление. Переменная 'ch' имеет тип 'char', а, следовательно, диапазон её значений лежит в пределах [-128..127]. Результатом сравнения "ch == 0xB7" и "ch==0xBB" всегда будет ложь (false). Чтобы код был корректен переменная 'ch' должна иметь тип 'unsigned char'. Исправленный код:
unsigned char ch = strText[i]; switch (ch) { ... case 0xB7: case 0xBB: strHTML += ch; strHTML += "<wbr>"; bLastCharSpace = FALSE; nNonbreakChars = 0; break; ... }
Данная диагностика классифицируется как:
|
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V551. |