﻿# V551\. Unreachable code under a 'case' label\.

Анализатор обнаружил потенциальную ошибку связанную с тем, что одна из ветвей оператора switch\(\) никогда не получит управление\. Причина этого в том, что аргумент оператора switch\(\) не может принять значение, которое прописано в операторе case\.

Рассмотрим пример:

```cpp
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'\. Исправленный код:

```cpp
unsigned char ch = strText[i];
switch (ch)
{
...
case 0xB7:
case 0xBB:
  strHTML += ch;
  strHTML += "<wbr>";
  bLastCharSpace = FALSE;
  nNonbreakChars = 0;
  break;
...
}
```