2013-06-14 10 views
6

Ho trovato il codice seguente durante la ricerca su google.Il compilatore non ha fornito un errore per il nome alternativo per il caso "predefinito" nell'interruttore

int main() 
{ 
    int a=10; 
    switch(a) 
    { 
     case '1': 
      printf("ONE\n"); 
      break; 
     case '2': 
      printf("TWO\n"); 
      break; 
     defa1ut: 
      printf("NONE\n"); 
    } 
    return 0; 
    } 

Il compilatore non sta dando un errore anche se il 'default' è sostituito da qualsiasi altro nome. Sta semplicemente eseguendo il programma ed uscendo dal programma senza stampare nulla.

Qualcuno potrebbe dirmi perché il compilatore non sta dando un errore sul caso di default? quando non è scritto come "predefinito"?

risposta

6

È un'etichetta normale (goto).

Si potrebbe fare questo, per esempio:

int main() 
{ 
    int a=10; 
    switch(a) 
    { 
     case '1': 
      printf("ONE\n"); 
      break; 
     case '2': 
      printf("TWO\n"); 
      break; 
     defa1ut: 
      printf("NONE\n"); 
    } 
    goto defa1ut; 
    return 0; 
} 
+0

: Grazie per la risposta. Quindi, ciò significa che posso accedere a questa etichetta goto da altre parti del programma, anche se l'etichetta si trova all'interno di un'istruzione switch – ponnus

+1

1/Che non agirà allo stesso modo, stamperà "NONE" finché le mucche non torneranno a casa. 2/È una programmazione particolarmente cattiva che sembra aver convinto l'OP da usare. Meglio spiegare semplicemente _why_ questo succede e proporre la soluzione di ortografia 'default' correttamente. – paxdiablo

2

Se si utilizza GCC, aggiungere -Wall alle opzioni.

La tua dichiarazione è una dichiarazione valida, dichiara un'etichetta. Se si utilizza -Wall, GCC ti avviserà dell'etichetta non utilizzata, non di più.

+1

In realtà, potrebbe avvisare se il tipo del selettore di switch è un enum e non tutti i casi dell'enum vengono gestiti. – wallyk

Problemi correlati