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 printfna to, że górna część switchinstrukcji 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?
gotowchodzić i wychodzić z nieosiągalnej w inny sposób części, co może być przydatne w przypadku różnych włamań.
switchjest to tylko warunek gotoz 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