Código
{ // algunas instrucciones antes ... goto etiqueta; // salto incondicional a donde este' la etiqueta int x; // permitido saltarse esto // mas instrucciones ... etiqueta: x = 1; // pero a pesar del salto la variable x existe aqui, con valor inicial desconocido. }
Pero esta prohibido saltar las declaraciones con inicializaciones.
Ejemplo:
Código
{ // algunas instrucciones antes ... goto etiqueta; // salto incondicional int x = 3; // no esta permitido saltarse esto // mas instrucciones ... etiqueta: // no se puede saltar aqui }
cada case de un switch es una etiqueta, y la variable es visible dentro de todo el switch, en el case actual y los siguientes.
Dado que la ejecucion del switch es un salto a cada etiqueta, al poner una definicion con inicializacion, se da el caso que esta prohibido, por ello el error de compilacion.