Considera la seguente switch
dichiarazione:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
Questo codice viene compilato, ma è valido (= comportamento definito) per C90 / C99? Non ho mai visto il codice in cui il caso predefinito non è l'ultimo caso.
EDIT:
Come scrivono Jon Cage e KillianDS : questo è un codice davvero brutto e confuso e ne sono ben consapevole. Sono solo interessato alla sintassi generale (è definita?) E all'output previsto.
goto
non è malvagio. I seguaci del culto del carico sono! Non si può immaginare fino a che punto le persone possano evitare goto
perché è maledettamente così malvagia, facendo un vero pasticcio illeggibile del loro codice.
goto
principalmente per simulare qualcosa come una finally
clausola nelle funzioni, in cui risorse (file, memoria) devono essere rilasciate quando si interrompe e ripetendo per ogni errore un elenco di free
e close
non aiuta per la leggibilità. C'è però un uso goto
che vorrei evitare ma che non posso, è quando voglio uscire da un ciclo e mi trovo all'interno di un switch
circuito.