Considere a seguinte switch
declaração:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
Esse código é compilado, mas é válido (= comportamento definido) para C90 / C99? Nunca vi código em que o caso padrão não seja o último.
Edição:
Como Jon Cage e KillianDS escrevem: este é um código realmente feio e confuso e eu estou ciente disso. Estou interessado apenas na sintaxe geral (está definida?) E na saída esperada.
goto
não é mau. Seguidores de culto de carga são! Você não pode imaginar até que ponto as pessoas extremos podem evitar, goto
porque é supostamente tão ruim, criando uma verdadeira bagunça ilegível de seu código.
goto
principalmente para simular algo como uma finally
cláusula em funções, em que recursos (arquivos, memória) precisam ser liberados ao parar e repetir para cada caso de erro uma lista free
e close
não ajuda na legibilidade. Há um uso goto
que eu gostaria de evitar, mas não posso, é quando eu quero sair de um loop e estou dentro de um switch
loop.