2012-07-03 10 views
27

ho questo codice:caso di default in una condizione di interruttore

#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; 
    } 

Il programma non stampa nulla, neanche NONE. Ho capito che default aveva un errore di battitura defalut!
Voglio sapere perché questo errore di sintassi non viene rilevato dal compilatore.

+3

questo è un ottimo esempio per cui NON UTILIZZI GOTO GUY TI STAI IMPOSTANDO PER IL GUASTO. –

+0

Sono d'accordo, che non avrebbe dovuto essere compilato. – KenL

+2

@Hans - OP non ha utilizzato GOTO. Sfortunatamente, fa parte della lingua e il compilatore non ha notato che l'etichetta non era in uso. –

risposta

35

defalut è solo un'etichetta nel programma in cui è possibile passare a goto. Avere un editor che evidenzia le parole chiave potrebbe aver reso questo errore più facile da individuare.

Devo anche notare che il programma potrebbe avere alcuni errori logici. Il carattere '1' non è lo stesso di 1 e lo stesso con '2' e 2.

+3

Bello. L'etichetta dell'istruzione probabilmente sopprimeva anche un avviso di "codice non raggiungibile" per l'ultimo 'printf'. –

+0

Wow ... Solo wow. È un bug sgradevole. – Daniel

11

Questo non è un errore di sintassi. defalut è un'etichetta valida e potrebbe essere l'obiettivo di un goto.

8

suggerimento: se si utilizza gcc, aggiungere l'opzione -pedantic. ti avviserà per le etichette non utilizzate:

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