Attraverso un piccolo errore di battitura, ho trovato per caso questo costrutto:
int main(void) {
char foo = 'c';
switch(foo)
{
printf("Cant Touch This\n"); // This line is Unreachable
case 'a': printf("A\n"); break;
case 'b': printf("B\n"); break;
case 'c': printf("C\n"); break;
case 'd': printf("D\n"); break;
}
return 0;
}
Sembra che la printf
parte superiore switch
dell'istruzione sia valida, ma anche completamente irraggiungibile.
Ho ottenuto una compilazione pulita, senza nemmeno un avvertimento sul codice irraggiungibile, ma questo sembra inutile.
Un compilatore dovrebbe contrassegnarlo come codice irraggiungibile?
Questo serve a qualche scopo?
goto
e uscire dalla parte altrimenti irraggiungibile, che può essere utile per vari hack.
switch
è solo un condizionale goto
con più etichette. Ci sono più o meno le stesse restrizioni sul suo corpo come su un normale blocco di codice pieno di etichette goto.
-Wswitch-unreachable