Nessun comportamento non definito. Ma il valore di i
viene testato solo quando il codice raggiunge switch (i)
. Quindi verrà saltato (dall'istruzione break;
).
La parola chiave switch
non significa "codice di esecuzione quando il valore di i
è 0/1". Significa, controlla cosa i
è GIUSTO ORA ed esegui il codice basato su quello. Non importa cosa succede a i
in futuro.
Infatti, a volte è utile fare:
for(step = 0; !cancelled; ++step) {
switch (step)
{
case 0:
//start processing;
break;
case 1:
// more processing;
break;
case 19:
// all done
return;
}
}
E cambiando la variabile di controllo in un blocco case
è estremamente comune quando si costruisce una macchina a stati finiti (anche se non richiesto, perché è possibile impostare next_state
all'interno case
e successivamente eseguire l'assegnazione state = next_state
).
fonte
2011-11-30 22:15:08
Perché dovrebbe? Se ti aspetti che 'case 1' venga eseguito da quando hai cambiato' i' su 1, non succederà neanche perché l'esecuzione raggiungerà la fine dell'istruzione 'switch' una volta che il' break' alla fine del 'caso 0' si incontra. – Praetorian