Przed przeczytaniem pozostałej części tej odpowiedzi przeczytaj Przejdź do oświadczenia uważanego za szkodliwy . Jeśli nie chcesz czytać go w całości, oto, co uważam za kluczowy punkt:
Nieokiełznane użycie polecenia go to ma natychmiastową konsekwencję, że znalezienie sensownego zestawu współrzędnych, w których można by opisać postęp procesu, staje się bardzo trudne.
Inaczej mówiąc, problem gotopolega na tym, że program może pojawić się w środku bloku kodu, bez zrozumienia przez programistę stanu programu w tym miejscu. Standardowe konstrukcje zorientowane na bloki są zaprojektowane tak, aby jasno określać przejścia stanów, etykieta breakma na celu przeniesienie programu do określonego znanego stanu (poza zawierającym oznaczony blok).
W programie imperatywnym w świecie rzeczywistym stan nie jest wyraźnie wyznaczony granicami bloków, więc wątpliwe jest, czy oznaczenie breakjest dobrym pomysłem. Jeśli blok zmienia stan, który jest widoczny z zewnątrz bloku i istnieje wiele punktów wyjścia z bloku, to oznaczenie breakjest równoważne prymitywu goto. Jedyna różnica polega na tym, że zamiast szansy wylądowania w środku bloku ze stanem nieokreślonym, zaczynasz nowy blok ze stanem nieokreślonym.
Tak więc ogólnie uważałbym etykietę breakza niebezpieczną. Moim zdaniem to znak, że blok należy przekształcić w funkcję, z ograniczonym dostępem do otaczającego zakresu.
Jednak ten przykładowy kod był wyraźnie produktem generatora parserów (OP skomentował, że był to kod źródłowy Xerces). Generatory parserów (lub generatory kodu w ogóle) często zachowują swobodę w kwestii generowanego kodu, ponieważ mają doskonałą wiedzę o stanie, a ludzie nie muszą go rozumieć.
label913zdefiniowane?