Caso predeterminado en una condición de interruptor

2 minutos de lectura

Caso predeterminado en una condicion de interruptor
loco

tengo este codigo:

  #include<stdio.h>                                   
  int main()
  {   
      int a=10;
      switch(a)
      {   
      case '1':
          printf("ONE\n");
          break;
      case '2':
          printf("TWO\n");
          break;
      defalut:
          printf("NONE\n");
      }   
      return 0;
  }

El programa no imprime nada, ni siquiera NONE. me di cuenta de que default tenía un error tipográfico defalut!
Quiero saber por qué el compilador no detecta este error de sintaxis.

  • este es un gran ejemplo de por qué USTEDES NO UTILIZAN GOTO CHICOS USTEDES SE ESTÁN PREPARANDO PARA EL FRACASO.

    – Hans Z.

    3 de julio de 2012 a las 16:40

  • @Hans – OP no usó GOTO. Desafortunadamente, es parte del lenguaje y el compilador no notó que la etiqueta no se usó.

    –Ted Hopp

    3 de julio de 2012 a las 16:41

  • No estoy diciendo que OP usó GOTO, solo estoy diciendo cualquier construcción donde for:, defalut:, if:, void:, do:y this: son válidos hará que su programación sea innecesariamente difícil de depurar.

    – Hans Z.

    3 de julio de 2012 a las 16:43

  • ¿Habilitó todas las advertencias en su compilador?

    – KerrekSB

    3 de julio de 2012 a las 16:45

  • @KerrekSB – ¡Genial! la advertencia aparece cuando lo compilo con el -Wall cambiar.

    – loco

    3 de julio de 2012 a las 19:01

defalut es solo una etiqueta en su programa a la que puede saltar con goto. Tener un editor que resalte las palabras clave podría haber facilitado la detección de este error.

También debo señalar que su programa puede tener algunos errores lógicos. El personaje '1' no es lo mismo que 1y lo mismo con '2' y 2.

  • Agradable. La etiqueta de declaración probablemente también suprimió una advertencia de “código inalcanzable” para el último printf.

    –Ted Hopp

    3 de julio de 2012 a las 16:38


Eso no es un error de sintaxis. defalut es una etiqueta válida y podría ser el objetivo de un goto.

1647725709 84 Caso predeterminado en una condicion de interruptor
Tobás

Consejo: si estás usando gccagrega la opción -pedantic. le advertirá de las etiquetas no utilizadas:

$ gcc -ansi -Wall -pedantic test.c -o test
test.c: In function ‘main’:
test.c:14:10: warning: label ‘defalut’ defined but not used

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad