2016-06-08 10 views
9

Perché questo codice viene compilato ed eseguito correttamente. Ho scritto defau1t invece di default, 1 al posto di l."defau1t:" (NOT "default:") è un valore valido per l'etichetta?

#include<stdio.h> 
int main() 
{ 
    int i=4; 
    switch(i) 
    { 
     case 3: 
     break; 
     defau1t : 
     break;  
    } 
} 
+4

È possibile dichiarare etichette arbitrarie per 'goto'. – EOF

+1

It [non viene compilato ed eseguito senza un avviso] (http://coliru.stacked-crooked.com/a/5c6a79adc4da3830). –

+1

Compila ... prova ... –

risposta

7

È un nome valido per un'etichetta , che può essere utilizzata come segnaposto per una chiamata goto. (E inserire un blocco tramite una chiamata goto è è consentito in C e C++ anche se è sconsigliato).

etichetta i nomi hanno generalmente le stesse regole dei nomi delle variabili quando si tratta dei caratteri che possono contenere. defau1t soddisfa tali regole.

Nel tuo caso, è benigno e verrà compilato in fase di esecuzione, anche se un buon compilatore ti avviserà che non è utilizzato.

+0

'un buon compilatore ti avviserà che non è usato. +1 per quello – Michi

+0

Esattamente lo stesso. Buon punto – Bathsheba

8

defau1t : è un nome di etichetta valida, anche se non è un'etichetta caso.

Si potrebbe avere un goto defau1t; da qualche altra parte nel codice.

Problemi correlati