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

The analyzer detected a potential error: one of the switch() operator's branches never gets control. The reason is that the switch() operator's argument cannot accept the value defined in the case operator.

Consider this sample:

    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;
    ...
    }

The branch following "case 0xB7:" and "case 0xBB:" in this code will never get control. The 'ch' variable has the 'char' type and therefore the range of its values is [-128..127]. The comparisons "ch == 0xB7" and "ch==0xBB" will always be false. To make the code correct, we must cast the 'ch' variable to the 'unsigned char' type:

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

This diagnostic is classified as:

CWE-561 CERT-MSC12-C

You can look at examples of errors detected by the V551 diagnostic.