Bevor Sie den Rest dieser Antwort lesen, lesen Sie bitte Gehe zu Erklärung, die als schädlich eingestuft wird . Wenn Sie es nicht vollständig lesen möchten, halte ich Folgendes für den entscheidenden Punkt:
Die ungezügelte Verwendung der go to-Anweisung hat die unmittelbare Folge, dass es furchtbar schwierig wird, einen aussagekräftigen Satz von Koordinaten zu finden, in denen der Prozessfortschritt beschrieben werden kann.
Oder um es anders auszudrücken: Das Problem gotobesteht darin, dass das Programm in der Mitte eines Codeblocks ankommen kann, ohne dass der Programmierer den Programmstatus zu diesem Zeitpunkt versteht. Die standardmäßigen blockorientierten Konstrukte sind so konzipiert, dass sie Zustandsübergänge klar abgrenzen. Ein Label breaksoll das Programm in einen bestimmten bekannten Zustand bringen (außerhalb des enthaltenden markierten Blocks).
In einem imperativen Programm der realen Welt ist der Zustand nicht klar durch Blockgrenzen abgegrenzt, so dass es fraglich ist, ob das Etikett breakeine gute Idee ist. Wenn der Block den von außerhalb des Blocks sichtbaren Status ändert und mehrere Punkte zum Verlassen des Blocks vorhanden sind, entspricht eine Beschriftung breakdem Grundelement goto. Der einzige Unterschied besteht darin, dass Sie anstelle der Chance, in der Mitte eines Blocks mit unbestimmtem Zustand zu landen, einen neuen Block mit unbestimmtem Zustand starten.
Im Allgemeinen würde ich ein Etikett breakals gefährlich betrachten. Meiner Meinung nach ist dies ein Zeichen dafür, dass der Block in eine Funktion mit eingeschränktem Zugriff auf den umschließenden Bereich konvertiert werden sollte.
Dieser Beispielcode war jedoch eindeutig das Produkt eines Parser-Generators (das OP kommentierte, dass es sich um Xerces-Quellcode handelte). Und Parser-Generatoren (oder Code-Generatoren im Allgemeinen) nehmen sich oft Freiheiten mit dem Code, den sie generieren, weil sie den Zustand perfekt kennen und der Mensch ihn nicht verstehen muss.
label913definiert?