Przez małą literówkę przypadkowo znalazłem ten konstrukt:
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;
}
Wygląda printf
na to, że górna część switch
instrukcji jest poprawna, ale również całkowicie nieosiągalna.
Mam czystą kompilację, nawet bez ostrzeżenia o nieosiągalnym kodzie, ale wydaje się to bezcelowe.
Czy kompilator powinien oznaczyć ten kod jako nieosiągalny?
Czy to w ogóle ma jakiś cel?
goto
wchodzić i wychodzić z nieosiągalnej w inny sposób części, co może być przydatne w przypadku różnych włamań.
switch
jest to tylko warunek goto
z wieloma etykietami. Istnieją mniej więcej takie same ograniczenia dotyczące jego ciała, jak w przypadku zwykłego bloku kodu wypełnionego etykietami goto.
-Wswitch-unreachable