2012-07-03 7 views
27

tengo este código:Caso por defecto en una condición de conmutación

#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. ¡Descubrí que default tenía un error tipográfico defalut!
Quiero saber por qué este error de sintaxis no es detectado por el compilador.

+3

este es un gran ejemplo de por qué USTED NO UTILIZA GOTO CHICOS USTED SE ESTABLECIENDO PARA EL FALLO. –

+0

Estoy de acuerdo, eso no debería haber compilado. – KenL

+2

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

Respuesta

35

defalut es solo una etiqueta en su programa a la que puede acceder con goto. Tener un editor que destaque las palabras clave podría haber hecho que este error sea más fácil de detectar.

También debería tener en cuenta que su programa puede tener algunos errores de lógica. El carácter '1' no es lo mismo que 1, y lo mismo con '2' y 2.

+3

Agradable. La etiqueta de declaración probablemente también suprimió una advertencia de "código inalcanzable" para el último 'printf'. –

+0

Guau ... Simplemente guau. Ese es un error desagradable. – Daniel

11

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

8

consejo: si está utilizando gcc, agregue 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 
Cuestiones relacionadas