Rozważ następujące switch
stwierdzenie:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
Ten kod jest kompilowany, ale czy jest prawidłowy (= zdefiniowane zachowanie) dla C90 / C99? Nigdy nie widziałem kodu, w którym domyślny przypadek nie jest ostatnim przypadkiem.
EDYCJA:
Jak piszą Jon Cage i KillianDS : to jest naprawdę brzydki i zagmatwany kod i jestem tego świadomy. Interesuje mnie tylko ogólna składnia (czy jest zdefiniowana?) I oczekiwane dane wyjściowe.
goto
nie jest zły. Wyznawcy kultu Cargo są! Nie możesz sobie wyobrazić, do jakich skrajności ludzie mogą się posunąć, goto
ponieważ jest to z całą pewnością tak złe, co powoduje prawdziwy nieczytelny bałagan w ich kodzie.
goto
głównie do symulacji czegoś w rodzaju finally
klauzuli w funkcjach, gdzie zasoby (pliki, pamięć) muszą być zwolnione podczas zatrzymywania, a powtarzanie dla każdego przypadku błędu listy free
i close
nie pomaga w czytelności. Jest jednak jedno użyciegoto
, którego chciałbym uniknąć, ale nie mogę, polega na tym, że chcę wyrwać się z pętli i jestem switch
w tej pętli.