Через небольшую опечатку я случайно нашел эту конструкцию:
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;
}
Кажется, что printf
в верхней части switch
утверждения является действительным, но также совершенно недоступным.
Я получил чистую компиляцию, даже без предупреждения о недоступном коде, но это кажется бессмысленным.
Должен ли компилятор пометить это как недоступный код?
Это вообще служит какой-либо цели?
goto
входить и выходить из недоступной части, которая может быть полезна для различных взломов.
switch
это просто условие goto
с несколькими метками. Его тело имеет более или менее те же ограничения, что и обычный блок кода, заполненный метками goto.
-Wswitch-unreachable