Por meio de um pequeno erro de digitação, encontrei acidentalmente esse construto:
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;
}
Parece que a printf
parte superior da switch
declaração é válida, mas também completamente inacessível.
Eu obtive uma compilação limpa, sem sequer um aviso sobre código inacessível, mas isso parece inútil.
Um compilador deve sinalizar isso como código inacessível?
Isso serve a algum propósito?
goto
entrar e sair da parte inacessível, que pode ser útil para vários hacks.
switch
é apenas uma condição goto
com vários rótulos. Existem mais ou menos as mesmas restrições em seu corpo que você teria em um bloco de código regular preenchido com rótulos de goto.
-Wswitch-unreachable