switch examples definicion code blocks c++ c switch-statement default

c++ - examples - switch default



¿Por qué es "defau4t" legal en una declaración de cambio? (3)

Esta pregunta ya tiene una respuesta aquí:

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.