考虑下面的switch
语句:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
这段代码可以编译,但它对于C90/C99是否有效(即定义良好的行为)呢?我从未见过默认情况不是最后一种情况的代码。
编辑:
正如Jon Cage和KillianDS所写:这真的是丑陋和令人困惑的代码,我非常清楚。我只是对一般语法(是否已定义?)和预期输出感兴趣。
goto
并非邪恶,那些盲目追随的人才是!你无法想象人们为了避免使用goto
会走到什么地步,因为它被声称是邪恶的,从而让代码变得难以阅读。 - Patrick Schlütergoto
来模拟函数中类似于finally
的代码块,用于在停止时释放资源(文件、内存),而对于每个错误情况都重复编写一系列的free
和close
语句并不利于可读性。但是有一种情况我想避免使用goto
却无法做到,那就是当我想要从一个循环中跳出,并且我正在该循环内部的switch
中。 - Patrick Schlüter