通过一点错字,我偶然发现了这个构造:
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