Предупреждение C6259

Помеченный код недоступен: ("expression" и "constant") в switch-expr не может оцениваться как "case-label"

Замечания

Это предупреждение указывает неустранимый код, вызванный результатом побитового сравнения и (&) в выражении коммутатора. Доступно только оператор case, соответствующий константе в выражении коммутатора; все остальные операторы регистра недоступны.

Имя анализа кода: DEADCODEINBITORLIMITEDSWITCH

Пример

Следующий пример кода создает это предупреждение, так как выражение (rand() & 3) switch не может оценить метку регистра (case 4):

#include <stdlib.h>

void f()
{
     switch (rand () & 3) {
        case 3:
            /* Reachable */
            break;
        case 4:
            /* Not reachable */
            break;
        default:
            break;
    }
}

Чтобы исправить это предупреждение, удалите недоступный код или убедитесь, что константа, используемая в инструкции case, правильна. Следующий код удаляет неустранимую инструкцию регистра:

#include <stdlib.h>

void f()
{
     switch (rand () & 3) {
        case 3:
            /* Reachable */
            break;
        default:
            break;
    }
}

См. также