c++ - examples - switch default
¿Por qué es "defau4t" legal en una declaración de cambio? (3)
Esta pregunta ya tiene una respuesta aquí:
- Caso por defecto en una condición de interruptor 3 respuestas
Se me ocurrió este programa en otro sitio y pensé en probarlo, aquí está el programa:
#include <stdio.h>
int main()
{
int a=10;
switch(a)
{
case ''1'': printf("one");
break;
case ''2'': printf("two");
break;
defau4t: printf("none");
}
return 0;
}
Sorprendentemente, esto compila sin errores ni advertencias. ¿Cómo es esto posible? ¿No hay un error en la palabra clave "predeterminado"?
¿Alguien podría explicar este comportamiento?
Aparte de ese error tipográfico por defecto.
creo que también necesitas actualizar
case ''1'': printf("one");
break;
case ''2'': printf("two");
break;
a
case 1: printf("one");
break;
case 2: printf("two");
break;
El token no se considera una palabra clave en absoluto. Esta es una marca de salto goto
llamada "defau4t" que apunta a un código muerto (después del break;
case ''2'':
):) ...
Prueba esto para reír (y un ciclo sin fin):
switch(a)
{
case ''1'': printf("one");
break;
case ''2'': printf("two");
break;
defau4t: printf("none");
default: goto defau4t;
}
Un error con la declaración del switch
es que puedes saltar dentro y fuera de ellos usando goto
. En cualquier punto dentro del switch
(o fuera de este), puede colocar una etiqueta a la que pueda goto
con goto
. Por supuesto, esa es una práctica muy mala, ya que conduce al código de spaghetti.
Así que defau4t:
es simplemente una etiqueta, y las etiquetas se pueden colocar prácticamente en cualquier lugar dentro de los cuerpos de las funciones.