с учетом того, что все внутри коммутатора имеет эквивалентную область видимости, вы всегда можете добавить свою логику кейса в другой блок {}, например, так ...
switch( thing ) {
case ONETHING: {
int x; // local to the case!
...
}
break;
case ANOTHERTHING: {
int x; // a different x than the other one
}
break;
}
.. теперь я не говорю, что это красиво. Просто поместите это как нечто, что возможно , если вам абсолютно необходимо изолировать что-то в одном случае от другого.
еще одна мысль по поводу области видимости - кажется хорошей практикой помещать в функцию только один переключатель, а не многое другое. В этих обстоятельствах переменная область видимости не так важна, поскольку в этом случае вы обычно имеете дело только с одним случаем выполнения при любом вызове функции.
Хорошо, последняя мысль о переключателях: если функция содержит более пары переключателей, возможно, пришло время провести рефакторинг вашего кода. Если функция содержит вложенных переключателей, возможно, это ключ к переосмыслению вашего дизайна =)