Я всегда задавался этим вопросом - почему вы не можете объявлять переменные после метки case в инструкции switch? В С++ вы можете объявить переменные почти везде (и объявить их близкими к первому использованию, очевидно, хорошо), но следующее все равно не будет работать:
switch (val)  
{  
case VAL:  
  // This won't work
  int newVal = 42;  
  break;
case ANOTHER_VAL:  
  ...
  break;
}  
Вышеуказанная ситуация дает мне следующую ошибку (MSC):
инициализация "newVal" пропускается меткой "case"
Это тоже ограничение на других языках. Почему такая проблема?
