Gehe zu
Gehe zu (gehe zu, GEHE ZU, GEHE ZU oder andere Fallkombinationen, abhängig von der Programmiersprache) ist a Aussage auf vielen Computer gefunden Programmiersprachen. Es führt a Einweg-Übertragung der Kontrolle zu einer anderen Codezeile; im Gegensatz a Funktionsaufruf Normalerweise gibt es die Kontrolle zurück. Die gesprungenen Standorte werden normalerweise mit Verwendung identifiziert Etiketten, obwohl einige Sprachen verwenden Linien Nummern. Bei der Maschinensprache Ebene, a gehe zu
ist eine Form von Zweig- oder Sprungerklärungin einigen Fällen kombiniert mit einer Stapelanpassung. Viele Sprachen unterstützen die gehe zu
Aussage und viele nicht (siehe § Sprachunterstützung).
Das Strukturierter Programm Theorem bewies, dass die gehe zu
Aussage ist nicht erforderlich, um Programme zu schreiben, die ausgedrückt werden können Flussdiagramme; Eine Kombination der drei Programmierkonstrukte von Sequenz, Auswahl/Auswahl und Wiederholung/Iteration reichen für jede Berechnung aus, die von einem durchgeführt werden kann Turing Maschinemit der Einschränkung das Code -Duplikation und zusätzliche Variablen müssen möglicherweise eingeführt werden.[1]
In der Vergangenheit gab es eine beträchtliche Debatte in der Wissenschaft und Industrie über die Verdienste der Verwendung von gehe zu
Aussagen. Die Verwendung von GOTO war früher häufig, aber seit dem Aufkommen strukturierter Programmierung in den 1960er und 1970er Jahren ist die Verwendung erheblich zurückgegangen. Die primäre Kritik Ist dieser Code, der GOTO -Anweisungen verwendet, ist schwerer zu verstehen als alternative Konstruktionen. Goto bleibt in sicherem Gebrauch Gemeinsame Verwendungsmuster, aber Alternativen werden im Allgemeinen verwendet, wenn verfügbar. Debatten über seine (limitierteren) Verwendungszwecke werden in den Kreisen der akademischen und Softwareindustrücke fortgesetzt.
Verwendungszweck
Goto -Label
Das gehe zu
Aussage wird oft mit dem kombiniert wenn Anweisung eine bedingte Kontrollübertragung verursachen.
Wenn Bedingung dann Goto Label
Programmiersprachen verhängen unterschiedliche Einschränkungen in Bezug auf das Ziel von a gehe zu
Aussage. Zum Beispiel die C Programmiersprache erlaubt keinen Sprung zu einer Etikett, die in einer anderen Funktion enthalten ist,[2] Springen innerhalb einer einzelnen Anrufkette sind jedoch mit der möglich setjmp/longjmp Funktionen.
Kritik
Bei der Voralgol-Sitzung 1959 abgehalten Heinz Zemanek Ausdrücklich Zweifel an der Notwendigkeit von GOTO -Aussagen warf; Zu der Zeit achtete niemand auf seine Bemerkung, einschließlich Edsger W. Dijkstra, der später der legendäre Gegner von Goto wurde.[3] Die 1970er und 1980er Jahre verzeichneten einen Rückgang der Verwendung von GOTO -Aussagen zugunsten des "Strukturierte Programmierung" Paradigma, mit goto kritisiert zu "unbemerabel Spaghetti -Code"(siehe unten). Einige Programmierstil Codierungsstandards, zum Beispiel die GNU -Pascal -Codierungsstandards, empfehlen für die Verwendung von GOTO -Aussagen.[4] Das Böhm -Jakopini -Beweis (1966) haben nicht die Frage gefragt, ob eine strukturierte Programmierung für die Softwareentwicklung angenommen werden soll, teilweise, weil die Konstruktion ein Programm eher verschleiert als die Verbesserung, da seine Anwendung die Einführung zusätzlicher lokaler Variablen erfordert.[5] Es löste jedoch eine herausragende Debatte zwischen Informatikern, Pädagogen, Sprachdesigner und Anwendungsprogrammierern aus, die sich langsam, aber stetig von der früher allgegenwärtigen Verwendung des GOTO abweichen. Wahrscheinlich ist die berühmteste Kritik an Goto ein Brief von Edsger Dijkstra 1968 namens "Gehen Sie zu einer schädlichen Aussage als schädlich".[3] In diesem Brief argumentierte Dijkstra, dass uneingeschränkte GOTO-Aussagen von Sprachen auf höherer Ebene abgeschafft werden sollten, da sie die Aufgabe, die Richtigkeit von Programmen (insbesondere diejenigen mit Schleifen zu beteiligen) zu analysieren und zu überprüfen.[6] Der Brief selbst löste eine Debatte aus, einschließlich eines von "schädlich als schädlichen" als schädlich angesehenen Briefes[7] gesendet an Kommunikation der ACM (CACM) im März 1987 sowie weitere Antworten anderer Personen, einschließlich Dijkstra's Auf einer etwas enttäuschenden Korrespondenz.[8]
Ein alternativer Standpunkt wird in dargestellt Donald Knuth's Strukturierte Programmierung mit GO to Aussagen, der viele häufige Programmieraufgaben analysiert und feststellt, dass in einigen von ihnen GOTO optimal ist Sprachkonstrukt benutzen.[9] Im Die C -Programmiersprache, Brian Kernighan und Dennis Ritchie Warnen Sie das gehe zu
ist "unendlich missbillig", schlägt aber auch vor, dass es für Fehlerhandler des Funktionsfunktionsfehlers und für mehrstufige Pausen aus Schleifen verwendet werden könnte.[10] Diese beiden Muster sind in zahlreichen nachfolgenden Büchern zu C von anderen Autoren zu finden;[11][12] [13][14] Ein Einführungslehrbuch aus dem Jahr 2007 stellt fest, dass das Fehlerbehandlungsmuster eine Möglichkeit ist, die "mangelnde integrierte Ausnahmebehandlung innerhalb der C-Sprache" zu bearbeiten.[11] Andere Programmierer, einschließlich Linux Kernel -Designer und Kodierer Linus Torvalds oder Software -Ingenieur und Buchautor Steve McConnell, auch Objekt gegen Dijkstra's Sichtweise, die besagt, dass Gotos eine nützliche Sprachfunktion sein kann, die Programmgeschwindigkeit, Größe und Code -Klarheit verbessert, jedoch nur, wenn sie von einem vergleichsweise vernünftigen Programmierer vernünftig verwendet werden.[15][16] Nach Angaben des Informatikprofessors John RegehrIm Jahr 2013 gab es im Linux -Kernel -Code ungefähr 100.000 Fälle von GOTO.[17]
Andere Akademiker nahmen einen extremeren Standpunkt an und argumentierten, dass selbst Anweisungen wie Unterbrechung
und Rückkehr
Aus der Mitte der Schleifen sind schlechte Praxis, da sie im Ergebnis von Böhm -Jacopini nicht benötigt werden, und somit befürwortete, dass Schleifen einen einzigen Ausstiegspunkt haben sollten.[18] Zum Beispiel, Bertrand Meyer schrieb in seinem Lehrbuch 2009, das Anweisungen mögen Unterbrechung
und fortsetzen
"Sind nur die alten gehe zu
in Schafkleidung ".[19] Eine leicht modifizierte Form des Böhm-Jacopini-Ergebnisses ermöglicht jedoch die Vermeidung zusätzlicher Variablen in der strukturierten Programmierung, solange mehrstufige Bruchs von Schleifen zulässig sind.[20] Weil einige Sprachen wie C keine mehrstufigen Pausen über ihre erlauben Unterbrechung
Schlüsselwort, einige Lehrbücher raten dem Programmierer zur Verwendung gehe zu
unter solchen Umständen.[14] Das Misra c 2004 Standardverbote gehe zu
, fortsetzen
sowie mehrere Rückkehr
und Unterbrechung
Aussagen.[21] Die Ausgabe 2012 des Misra C -Standards stufte das Verbot an herab herab, wenn gehe zu
von "erforderlich" zum "Beratungs" Status; Die 2012 -Ausgabe hat eine zusätzliche, obligatorische Regel, die nur rückwärts, aber keine Vorwärtssprung mit gehe zu
.[22][23]
Forran Einführte strukturierte Programmierkonstrukte 1978 und in aufeinanderfolgenden Überarbeitungen wurden die relativ losen semantischen Regeln für die zulässige Verwendung von GOTO verschärft. Der "erweiterte Bereich", in dem ein Programmierer mit einem GOTO eine noch ausgeführte Do-Loop eingeben und hinterlassen konnte, wurde 1978 aus der Sprache entfernt.[24] Und bis 1995 waren verschiedene Formen von Forran Goto, einschließlich des berechneten Goto und dem zugewiesenen Goto, gelöscht.[25] Einige verwendete moderne Programmiersprachen wie z. Java und Python fehlt die Goto -Aussage - siehe Sprachunterstützung - Obwohl die meisten einige Mittel bieten, um aus einer Auswahl auszubrechen, oder entweder Brechen aus oder ziehen um auf den nächsten Schritt einer Iteration. Der Standpunkt, dass das Stören des Kontrollflusss im Code unerwünscht ist Ada[26] betont visuell Etikettendefinitionen mithilfe Winkelklammern.
Eintrag 17.10 in comp.lang.c FAQ -Liste[27] befasst sich mit dem Problem der GOTO -Verwendung direkt an, die Angabe
Der Programmierstil ist wie das Schreibstil eine Art Kunst und kann nicht durch unflexible Regeln kodifiziert werden, obwohl die Diskussionen über Stil oft ausschließlich um solche Regeln zu drehen scheinen. Im Falle der GOTO -Erklärung wurde seit langem beobachtet, dass der uneingeschränkte Gebrauch von GOTO schnell zu nicht wachbarem Spaghetti -Code führt. Ein einfaches, unüberlegtes Verbot der GOTO-Aussage führt jedoch nicht unbedingt sofort zu einer schönen Programmierung: Ein unstrukturierter Programmierer kann genauso in der Lage sein, ein byzantinisches Gewirr zu bauen, ohne dass GOTOs seltsam benachteiligte Schleifen und stattdessen boolesche Kontrollvariablen ersetzen) . Viele Programmierer nehmen eine mäßige Haltung ein: GOTOs sind normalerweise zu vermeiden, sind jedoch in einigen gut eingeschränkten Situationen, falls erforderlich Eine Funktion mit mehreren Fehlerrenditen. (...) Wenn Sie blind bestimmte Konstrukte vermeiden oder Regeln befolgen, ohne sie zu verstehen, kann dies zu genauso vielen Problemen führen, wie es die Regeln abwenden sollten. Darüber hinaus sind viele Meinungen zum Programmierstil genau das: Meinungen. Sie mögen stark argumentiert und stark gefühlt werden, sie können durch solide auftretende Beweise und Argumente unterstützt werden, aber die entgegengesetzten Meinungen können genauso stark empfunden, unterstützt und argumentiert sein. Normalerweise ist es sinnlos, in "Stilkriege" hineingezogen zu werden, da die Gegner in bestimmten Fragen niemals zustimmen oder zustimmen können, nicht zuzustimmen oder nicht mehr zu streiten.
Gemeinsame Verwendungsmuster
Während die allgemeine Nutzung von Gotos sinkt, gibt es in einigen Sprachen immer noch Situationen, in denen ein GOTO die kürzeste und einfachste Möglichkeit bietet, die Logik eines Programms auszudrücken (während es möglich ist, dieselbe Logik ohne Gotos auszudrücken, wird der äquivalente Code länger sein und oft schwieriger zu verstehen). In anderen Sprachen gibt es strukturierte Alternativen, insbesondere Ausnahmen und Schwanzaufrufe.
Situationen, in denen GOTO oft nützlich ist, umfassen:
- Um den Code lesbarer und einfacher zu befolgen[15][28]
- Kleinere Programme zu machen und Code -Duplikation loszuwerden[15][28]
- Implementieren a Finite-State-Maschine, Verwendung einer Zustandsübergangstabelle und goto zu wechseln zwischen den Zuständen (in Abwesenheit von Schwanzanruf Eliminierung), insbesondere im automatisch generierten C -Code.[29] Zum Beispiel, Goto im kanonischen LR -Parser.
- Implementierung von Multi-Level-Pausen und weiterhin direkt unterstützt, wenn sie in der Sprache direkt unterstützt werden; Dies ist eine gemeinsame Idiom in C.[14] Obwohl Java das GOTO -Keyword behält, implementiert es es nicht. Stattdessen implementiert Java mit der Bezeichnung Pause und markierten Fortsetzungsanweisungen.[30] Laut der Java-Dokumentation war die Verwendung von Gotos für mehrstufige Pausen die häufigste (90%) Verwendung von Gotos in C.[31] Java war nicht die erste Sprache, die diesen Ansatz verfolgte-um Goto zu bieten, sondern mehrstufige Pausen bereitzustellen-die WONNE Die Programmiersprache (genauer gesagt die Bliss-11-Version davon) ging diesbezüglich voraus.[32]
- Surrogate für einstufige Break- oder Fortsetzung (Wiederholung) Anweisungen, wenn die mögliche Einführung zusätzlicher Schleifen den Kontrollfluss falsch beeinflussen könnte. Diese Praxis wurde in beobachtet Netbsd Code.[33]
- Fehlerbehandlung (ohne Ausnahmen), insbesondere Reinigungscode wie Ressourcenverkleidung.[11][14][33][29][34] C ++ bietet eine Alternative zu GOTO -Anweisung für diesen Anwendungsfall, nämlich: Ressourcenerwerb ist die Initialisierung (Raii) Durch die Verwendung von Zerstörern oder die Verwendung von Versuch, Ausnahmen zu fangen, die in verwendet werden Ausnahmebehandlung.[35] setjmp und LongJMP sind eine andere Alternative und haben den Vorteil, einen Teil der zu entspannen Rufen Sie Stack an.
- Das Stapel in z. B. Algol, pl/i.
- Spezialisierte Skriptsprachen, die linear funktionieren, wie ein Dialogsystem für Videospiele.[36]
Diese Verwendungen sind in C relativ häufig, aber in C ++ oder anderen Sprachen mit höheren Merkmalen viel seltener.[34] Das Werfen und Fangen einer Ausnahme innerhalb einer Funktion kann in einigen Sprachen jedoch außerordentlich ineffizient sein. Ein Paradebeispiel ist Ziel c, wo ein Goto eine viel schnellere Alternative ist.[37]
Eine weitere Verwendung von GOTO -Aussagen besteht darin, schlecht berücksichtigte Änderungen zu ändern Legacy -Code, wo das Vermeiden eines Goto umfangreich erforderlich wäre Refactoring oder Code -Duplikation. Bei einer großen Funktion, bei der nur ein bestimmter Code von Interesse ist, ermöglicht eine GOTO -Anweisung es, zu oder von nur dem entsprechenden Code zu springen, ohne die Funktion anders zu ändern. Diese Verwendung wird berücksichtigt Code -Geruch,[38] findet aber gelegentlich Gebrauch.
Alternativen
Strukturierte Programmierung
Der moderne Begriff von Subroutine wurde erfunden von David Wheeler beim Programmieren der Edsac. Um einen Anruf zu implementieren und auf einen Computer ohne Unterroutine-Anrufanweisung zurückzukehren, verwendete er ein spezielles Muster selbstmodifizierender Code, das als a bekannt ist Wheelersprung.[39] Dies führte zu der Fähigkeit, Programme mit gut benachteilten Ausführungen von Routinen aus einer Bibliothek zu strukturieren. Dies hätte nicht nur verwendet gewesen gehe zu
Da der Zielcode, der aus der Bibliothek gezogen wurde, nicht wissen würde, wohin er zurückspringen soll.
Später hochrangige Sprachen wie z. Pascal wurden um Unterstützung für die Unterstützung für Strukturierte Programmierung, was verallgemeinert aus Unterroutinen (auch als Verfahren oder Funktionen bezeichnet) in Richtung weiter Kontrollstrukturen wie zum Beispiel:
- Schleifen verwenden
während
,wiederhole bis
odertun
, undzum
Aussagen -
Schalter
a.k.a.Fall
Aussagen, eine Form von Multiway -Verzweigung
Diese neuen Sprachmechanismen ersetzten äquivalente Flüsse gehe zu
s und wenn
s. Die Mehrzweig-Verzweigung ersetzt das "berechnete Goto", in dem der Anweisungen dynamisch (bedingt) bestimmt wird.
Unter bestimmten Bedingungen ist es möglich, die lokalen GO -Aussagen zu Erlternsprogrammen zu beseitigen, indem sie durch mehrstufige Schleifen -Exit -Anweisungen ersetzt werden.[40]
Ausnahmen
In der Praxis liefert eine strikte Einhaltung der grundlegenden dreistrukturellen Vorlage der strukturierten Programmiervorlagen einen stark verschachtelten Code, da es nicht in der Lage ist, eine strukturierte Einheit vorzeitig zu verlassen, und a Kombinatorische Explosion mit recht komplexen Programmstatusdaten, um alle möglichen Bedingungen zu bewältigen.
Es wurden im Allgemeinen zwei Lösungen übernommen: eine Möglichkeit, eine strukturierte Einheit vorzeitig und allgemeiner zu verlassen Ausnahmen - In beiden Fällen gehen diese hoch Die Struktur, die Steuerung in Blöcke oder Funktionen zurückgibt, springt jedoch nicht an willkürliche Codepositionen. Diese sind analog zur Verwendung einer Rückgaberklärung in nicht terminaler Position-aufgrund des frühen Ausstiegs nicht streng strukturiert, sondern eine leichte Entspannung der Strenge der strukturierten Programmierung. In c, Unterbrechung
und fortsetzen
Erlauben Sie einen zu eine Schleife beenden oder Fahren Sie mit der nächsten Iteration fort, ohne ein Extra zu benötigen während
oder wenn
Aussage. In einigen Sprachen sind auch mehrstufige Pausen möglich. Für die Behandlung von außergewöhnlichen Situationen, spezialisiert Ausnahmebehandlung Konstrukte wurden hinzugefügt, wie z. Versuchen
/Fang
/endlich
in Java.
Die Mechanismen zur Ausnahme von Wurf-Catch-Ausnahmen können auch leicht missbraucht werden, um nicht transparente Kontrollstrukturen zu erstellen, genau wie Goto missbraucht werden kann.[41]
Schwanzaufrufe
In einer Zeitung, die 1977 an die ACM -Konferenz in Seattle geliefert wurde, Guy L. Steele Zusammenfassend fasste die Debatte über die GOTO- und strukturierte Programmierung zusammen und stellte fest, dass Verfahrensaufrufe in der Heckposition eines Verfahrens am optimalsten als direkte Kontrollübertragung in das aufgerufene Verfahren behandelt werden können, wodurch unnötige Stapelmanipulationsvorgänge beseitigt werden.[42] Da solche "Schwanzaufrufe" in sehr häufig sind LispelnEine Sprache, in der Prozeduraufrufe allgegenwärtig sind, reduziert diese Form der Optimierung die Kosten eines Verfahrensaufrufs im Vergleich zu den in anderen Sprachen verwendeten GOTO erheblich. Steele argumentierte, dass schlecht implementierte Verfahrensanrufe zu einer künstlichen Wahrnehmung geführt hätten, dass die GOTO im Vergleich zum Verfahrensanruf billig sei. Steele argumentierte ferner, dass "im Allgemeinen Verfahren Anrufe nützlich als GOTO -Aussagen betrachtet werden können, die auch Parameter übergeben und gleichmäßig codiert werden können als Maschinensprache Sprunganweisungen "mit dem Maschinencode -Stapel -Manipulationsanweisungen" als Optimierung (anstatt umgekehrt!) "[42] Steele zitierte Beweise dafür, dass gut optimierte numerische Algorithmen in LISP schneller ausgeführt werden könnten als der Code, der von den damals verfügbaren kommerziellen FORTRAN-Compilern erzeugt wurde, da die Kosten für einen Verfahrensanruf in LiSP viel niedriger waren. Im Planen, ein Lisp -Dialekt, der von Steele mit entwickelt wurde Gerald Jay SussmanDie Schwanzanrufoptimierung ist obligatorisch.[43]
Obwohl Steeles Papier nicht viel in der Informatik neu einführte, zumindest wie es am MIT praktiziert wurde, brachte es den Umfang der Verfahrensanrufoptimierung ans Licht, was die Modularitätsqualitäten von Verfahren zu einer glaubwürdigeren Alternative zu der machte Die damaligen Kodierungsgewohnheiten großer monolithischer Verfahren mit komplexen internen Kontrollstrukturen und umfangreichen Zustandsdaten. Insbesondere die von Steele diskutierten Schwanzaufrufoptimierungen verwandelten das Verfahren in eine glaubwürdige Art der Implementierung der Iteration durch Single Schwanzrekursion (Schwanzreursion aufruft dieselbe Funktion). Darüber hinaus erlaubt die Schwanzaufrufoptimierung gegenseitige Rekursion von unbegrenzter Tiefe unter der Annahme von Schwanzaufrufen - dies ermöglicht die Übertragung von Kontrolle wie in endliche Staatsmaschinen, was ansonsten im Allgemeinen mit GOTO -Aussagen erreicht wird.
Coroutinen
Coroutinen sind eine radikalere Entspannung der strukturierten Programmierung, die nicht nur mehrere Ausstiegspunkte (wie in Renditen in der Nichtschwanzposition), sondern auch mehrere Einstiegspunkte ermöglichen, ähnlich wie bei GOTO-Anweisungen. Coroutinen sind eingeschränkter als Goto, wie sie nur können fortsetzen Eine derzeit laufende Coroutine an bestimmten Punkten - fortgesetzt nach einer Rendite -, anstatt zu einem willkürlichen Punkt im Code zu springen. Eine begrenzte Form von Coroutinen sind Generatoren, die für einige Zwecke ausreichen. Noch begrenzter sind Schließungen - Unterprogramme, die den Zustand (via "aufrechterhalten Statische Variablen), aber keine Ausführungsposition. Eine Kombination von Zustandsvariablen und strukturierten Steuerung, insbesondere eine Gesamtschalteranweisung, kann es einer Unterroutine ermöglichen, die Ausführung an einem willkürlichen Punkt auf nachfolgenden Aufrufen wieder aufzunehmen, und ist eine strukturierte Alternative zu GOTO -Aussagen in Abwesenheit von Coroutinen. Dies ist beispielsweise eine gemeinsame Idiom in C.
Kontinuationen
A Fortsetzung ähnelt einem Goto, in dem es die Kontrolle von einem willkürlichen Punkt im Programm an einen zuvor ausgeprägten Punkt überträgt. Eine Fortsetzung ist in den Sprachen, die sie unterstützen, flexibler als GOTO, da sie die Kontrolle aus der aktuellen Funktion übertragen kann, was ein Goto in den meisten strukturierten Programmiersprachen nicht tun kann. In jenen Sprachimplementierungen, die Stapelrahmen für die Speicherung lokaler Variablen und Funktionsargumente verwalten, wird die Ausführung einer Fortsetzung der Anpassung des Programms durchgeführt Rufen Sie Stack an Zusätzlich zu einem Sprung. Das longjmp Funktion des C Programmiersprache ist ein Beispiel für eine Fluchtdauer, die verwendet werden kann, um dem aktuellen Kontext zu einem umgebenden zu entkommen. Das Common Lisp Go -Betreiber hat auch dieses Stapelunternehmen, trotz des Konstrukts lexikalisch abgebildet, wie das zu springensbezeichnete Etikett aus a referenziert werden kann Schließung.
Im PlanenFortsetzung können sogar die Kontrolle von einem äußeren Kontext in einen inneren Überblick übertragen, falls gewünscht. Diese nahezu unbegrenzte Kontrolle darüber, welcher Code als nächstes ausgeführt wird, macht komplexe Kontrollstrukturen wie Coroutinen und kooperatives Multitasking relativ einfach zu schreiben.[43]
Nachrichtenübergang
In nicht proceduralen Paradigmen ist GOTO weniger relevant oder vollständig nicht vorhanden. Eine der Hauptalternativen ist Nachrichtenübergang, was von besonderer Bedeutung ist in Gleichzeitiges Computer, Interprozesskommunikation, und Objekt orientierte Programmierung. In diesen Fällen haben die einzelnen Komponenten keine willkürliche Kontrollübertragung, die Gesamtkontrolle kann jedoch auf komplexe Weise geplant werden, wie z. Präsentation. Die einflussreichen Sprachen Simula und Smalltalk waren unter den ersten, die die Konzepte von Nachrichten und Objekten einführten. Durch Einkapselung Zustandsdaten, Objekt orientierte Programmierung Reduzierte Softwarekomplexität für Interaktionen (Nachrichten) zwischen Objekten.
Variationen
Es gibt eine Reihe verschiedener Sprachkonstrukte unter der Klasse von gehe zu Aussagen.
Berechnete Goto und Goto zugewiesen
Im Forran, a berechnet GEHE ZU
springt zu einem von mehreren Etiketten in einer Liste, basierend auf dem Wert eines Ausdrucks. Ein Beispiel ist Goto (20,30,40) i
.[44] Das äquivalente Konstrukt in C ist das Schaltanweisung und in neuerem Forran a FALL
Aussage ist die syntaktische Alternative.[45] BASIC hatte a 'Auf goto' '
Aussage, die das gleiche Ziel erreichte, aber in Visual Basic Dieses Konstrukt wird nicht mehr unterstützt.[46]
In Versionen vor Forran 95 hatte Forran auch eine Goto zugewiesen Variante, die die Steuerung in eine Anweisungsbezeichnung (Zeilennummer) überträgt, die in einer Ganzzahlvariablen gespeichert ist (zugewiesen). Es war leider möglich, zu einer Ganzzahlvariablen zu springen, die nicht zugewiesen worden war, und war eine Hauptquelle für Fehler, die zugewiesene Gotos umfassten.[47] Der Forran zuordnen
Die Anweisung ermöglicht nur eine konstante (vorhandene) Zeilennummer der Ganzzahlvariablen. Es war jedoch möglich, diese Variable versehentlich als Ganzzahl danach zu behandeln, z. gehe zu
Zeit. Der folgende Code zeigt das Verhalten der goto i
wenn Linie i ist nicht spezifiziert:
zuordnen 200 zu i i = i+1 gehe zu i ! nicht näher bezeichnetes Verhalten 200 schreiben(*,*) "Dies ist eine gültige Zeilennummer"
Mehrere C-Compiler implementieren zwei nicht standardmäßige C/C ++-Erweiterungen in Bezug auf GOTOs, die ursprünglich eingeführt wurden von von GCC.[48] Die GNU -Erweiterung ermöglicht die Adresse einer Etikett innerhalb der aktuellen Funktion als a Leere*
Verwenden des unären Präfixes Etikettenwertoperator &&
. Die GOTO -Anweisung wird ebenfalls erweitert, damit das Springen zu einem willkürlichen Sprung springen kann Leere*
Ausdruck. Diese C -Erweiterung wird als a bezeichnet berechnete Goto in Dokumentation der C -Compiler, die es unterstützen; Seine Semantik ist ein Supersatz von Forrans zugewiesenem Goto, da es willkürliche Zeigerausdrücke als GOTO -Ziel ermöglicht, während der zugewiesene Goto von Forran keine willkürlichen Ausdrücke als Sprungziel zulässt.[49] Wie bei der Standard -GOTO in C ermöglicht die GNU C -Erweiterung das Ziel des berechneten GOTO nur in der aktuellen Funktion. Der Versuch, außerhalb der aktuellen Funktion zu springen, führt zu einem nicht spezifizierten Verhalten.[49]
Einige Basic -Varianten unterstützen auch eine berechnete GOTO in dem Sinne, das in GNU C verwendet wird, d. H. In dem das das Ziel sein kann irgendein Zeilennummer, nicht nur eine aus einer Liste. Zum Beispiel in MTS Grundlegender könnte schreiben Goto i*1000
Zum 1000 -fachen des Wertes einer Variablen zu der Linie zu springen i (Dies könnte beispielsweise eine ausgewählte Menüoption darstellen).[50]
Pl/i Beschriftungsvariablen Erzielen Sie den Effekt von berechneten oder zugewiesenen GEHE ZU
s.
ÄNDERN
Bis zum 1985 ANSI Cobol Standard hatte die Änderungserklärung, mit der das Ziel eines vorhandenen GOS geändert werden konnte, zu dem sich in einem Absatz für sich selbst befinden musste.[51] Die Funktion, die erlaubte Polymorphismus, wurde häufig verurteilt und selten verwendet.[52]
Perl Goto
Im PerlEs gibt eine Variante der gehe zu
Aussage, die überhaupt keine traditionelle Goto -Aussage ist. Es erfordert einen Funktionsnamen und überträgt die Kontrolle, indem es einen Funktionsaufruf für einen anderen ersetzt (a Schwanzanruf): Die neue Funktion kehrt nicht zum GOTO zurück, sondern an den Ort, von dem die ursprüngliche Funktion aufgerufen wurde.[53]
Emuliert Goto
Es gibt mehrere Programmiersprachen, die goto standardmäßig nicht unterstützen. Durch die Verwendung von Goto -Emulation ist es immer noch möglich, GOTO in diesen Programmiersprachen zu verwenden, wenn auch mit einigen Einschränkungen. Man kann Goto in Java emulieren,[54] JavaScript,[55] und Python.[56][57]
PL/I Beschriftungsvariablen
Pl/i hat den Datentyp ETIKETT, mit der sowohl das "zugewiesene Goto" als auch das "berechnete Goto" implementiert werden können. PL/I erlaubt Zweige aus dem aktuellen Block. Ein Anrufverfahren kann ein Etikett als Argument an ein aufgerufenes Verfahren übergeben, das dann mit einem Zweig beenden kann. Der Wert einer Etikettenvariablen umfasst die Adresse eines Stapelrahmens und ein Goto aus Block schlägt den Stapel.
/ * Dies implementiert das Äquivalent von *// * dem zugewiesenen Goto */ deklarieren Sie wo Etikett; wo = irgendwo; wohin gehen; ... irgendwo: / * Anweisung * /; ...
/ * Dies implementiert das Äquivalent von *// * dem berechneten Goto */ deklarieren Sie, wo (5) Etikett; Inx deklarieren; wo (1) = ABC; wo (2) = xyz; ... goto wo (Inx); ... ABC: / * Anweisung * /; ... xyz: / * Anweisung * /; ...
Ein einfacherer Weg, um ein äquivalentes Ergebnis zu erzielen, besteht darin, a zu verwenden Etiketten Sie konstantes Array Das braucht nicht einmal eine explizite Erklärung von a ETIKETT Typvariable:
/ * Dies implementiert das Äquivalent von *// * dem berechneten Goto */ deklarieren Sie inx fest; ... goto wo (Inx); ... wo (1): / * Anweisung * /; ... wo (2): / * Anweisung * /; ...
MS/dos Goto
Goto leitet die Ausführung auf ein Etikett, das mit einem Dickdarm beginnt. Das Ziel der GOTO kann eine Variable sein.
@Echo ausEINSTELLEN D8str=%Datum% EINSTELLEN D8dow=%D8str: ~ 0,3% ZUM %%D in (Mon Mi Fr) tun wenn "%%D" == "%D8dow%" gehe zu Shop %% d Echo Heute, %D8dow%, ist kein Einkaufstag.gehe zu Ende :Shopmon Echo Kaufen Sie Pizza zum Mittagessen - Montag ist Pizza -Tag.gehe zu Ende :Ladung Echo Kaufen Sie Calzone, um mit nach Hause zu nehmen - heute ist Mittwoch.gehe zu Ende :ShopFri Echo Kaufen Sie Seltzer, falls jemand ein Null -Kalorien -Getränk wünscht.:Ende
Sprachunterstützung
Viele Sprachen unterstützen die gehe zu
Aussage, und viele nicht. Im Java, gehe zu
ist ein reserviertes Wort, ist aber unbrauchbar, obwohl die kompilierte Datei.Class Gotos und Etiketten generiert.[58] Python hat keine Unterstützung für Goto, obwohl es mehrere Witzmodule gibt, die es bieten.[56][57] Es gibt keine Goto -Aussage in Samen7 Und versteckte Gotos wie Break- und Fortsetzung werden ebenfalls weggelassen.[59] Im Php Es gab keine einheimische Unterstützung für gehe zu
Bis Version 5.3 (Bibliotheken standen verfügbar, um seine Funktionalität zu emulieren).[60]
Das C# Programmiersprache hat gehe zu
.[61] Es erlaubt jedoch nicht, auf ein Etikett außerhalb des aktuellen Bereichs zu springen, was es deutlich weniger mächtig und gefährlich macht als die gehe zu
Schlüsselwort in anderen Programmiersprachen. Es macht auch Fall und Ursprünglich Aussagen Etiketten, deren Umfang die Einschließung ist Schaltanweisung; Goto Fall oder Goto Standard wird oft als expliziter Ersatz für implizite Falle verwendet, was C# nicht zuständig ist.
Das Pl/i Die Programmiersprache hat eine GOTO -Aussage, die den Stapel für eine Blockübertragung abwickelt und keine Übertragung in einen Block von außen ermöglicht.
Andere Sprachen haben möglicherweise eigene separate Schlüsselwörter für explizite Falle, die als Version von betrachtet werden können gehe zu
auf diesen spezifischen Zweck beschränkt. Zum Beispiel verwendet Go die durchfallen
Schlüsselwort und erlaubt implizite Falle überhaupt, überhaupt,[62] Während Perl 5 verwendet nächste
Für explizite Falle standardmäßig, ermöglicht es jedoch auch, implizite Falle als Standardverhalten für ein Modul festzulegen.
Die meisten Sprachen, die Goto -Aussagen haben, nennen es das, aber in den frühen Tagen des Computers wurden andere Namen verwendet. Zum Beispiel in WÜTEND Die Übertragung zur Erklärung wurde verwendet.[63] Apl Verwendet einen richtigen Pfeil, →
für Goto.
C hat Goto und wird häufig in verschiedenen Redewendungen verwendet, wie oben diskutiert.
Da ist ein gehe zu
Funktion in Perl auch. (siehe oben)
Funktionelle Programmiersprachen wie das Schema haben im Allgemeinen keine GOTO, sondern verwendet stattdessen Kontinuationen.
Siehe auch
- KOMME AUS
- Steuerfluss
- Gosub
- Schaltanweisung - a Multiway -Zweig (oder bedingte Goto)
- Unstrukturierte Programmierung
- Als schädlich angesehen
Anmerkungen
- ^ Watt & Findlay 2004.
- ^ Kernighan & Ritchie 1988, p. 224, A9.6 Sprungerklärungen.
- ^ a b Dijkstra 1968.
- ^ GNU Pascal Development Team 2005, 5.1 verschiedene Pascal -Programmier -Tipps.
- ^ Louden & Lambert 2012.
- ^ "Die ungezügelte Verwendung der GOTO -Aussage hat eine unmittelbare Folge, dass es furchtbar schwierig wird, eine aussagekräftige Reihe von Koordinaten zu finden, in denen der Prozessfortschritt beschrieben werden kann. Zu viel Einladung, um das eigene Programm durcheinander zu bringen. "
- ^ Rubin 1987.
- ^ Dijkstra, Edsger W. Auf einer etwas enttäuschenden Korrespondenz (EWD-1009) (PDF). E. W. Dijkstra Archiv. Zentrum für amerikanische Geschichte, Universität von Texas in Austin. (Transkription) (Mai 1987)
- ^ Knuth 1974.
- ^ Kernighan & Ritchie 1988, S. 65–66, 3,8 Goto und Labels.
- ^ a b c Vine 2007, p. 262.
- ^ Geisler 2011.
- ^ Prata 2013.
- ^ a b c d Sahni & Cmelik 1995.
- ^ a b c Andrews 2003.
- ^ McConnell 2004.
- ^ Regehr 2013.
- ^ Roberts 1995.
- ^ Meyer 2009.
- ^ Kozen & Tseng 2008.
- ^ Stapelüberlauffragen 2012.
- ^ Pitchford & Tapp 2013.
- ^ Williams 2013.
- ^ ANSI X3.9-1978. American National Standard - Programmiersprache Forran. American National Standards Institute. Auch als ISO 1539-1980 bekannt, informell bekannt als Fortran 77
- ^ ISO/IEC 1539-1: 1997. Informationstechnologie - Programmiersprachen - FORTRAN - Teil 1: Basissprache. Informell bekannt als Forran 95. Es gibt weitere zwei Teile für diesen Standard. Teil 1 wurde von ANSI offiziell übernommen.
- ^ Barnes 2006.
- ^ Summit 1995.
- ^ a b Torvalds 2016.
- ^ a b Cozens 2004.
- ^ Java Tutorial 2012.
- ^ Gosling & McGilton 1996.
- ^ Brender 2002, S. 960–965.
- ^ a b Spinellis 2003.
- ^ a b Allain 2019.
- ^ Stroustrup 2012.
- ^ Hoad, Nathan (28. Juli 2022). "Nathanhoad/Godot_Dialogue_Manager". Abgerufen 28. Juli 2022.
- ^ Chisnall 2012.
- ^ Contieri 2021.
- ^ Wilkes, Wheeler & Gill 1951.
- ^ Ramshaw 1988.
- ^ Siedenleben 2006.
- ^ a b Steele 1977.
- ^ a b Kelsey, Cler & Rees 1998.
- ^ , was bedeutet, dass das Programm auf die Kennzeichnung 20, 30 oder 40 kennzeichnet, falls dies der Fall ist i ist entweder weniger als, gleich oder größer als Null.
- ^ Lahey Computer Systems, Inc 2004.
- ^ Microsoft 2021.
- ^ Wehr 1997.
- ^ Z/OS 2.5.0 in IBM -Dokumentation 2021.
- ^ a b GCC, die GNU Compiler Collection 2021.
- ^ Fronczak & Lubbers 1974, p. 226.
- ^ Die Alterserklärung wurde im COBOL 1985 -Standard als veraltet angesehen und 2002 gelöscht; sehen COBOL> Selbstmodifizierender Code
- ^ Van Tassel 2004.
- ^ Perl Syntax Manual 2021.
- ^ Goto für Java 2009.
- ^ Sexton 2012.
- ^ a b Hindle 2004.
- ^ a b Noack et al. 2015.
- ^ Gosling et al. (2005) Im Gegensatz zu C und C ++ hat die Java -Programmiersprache keine Aussage; Bezeichnungen zur Bezeichnung "Identifiererklärungen" werden mit Break (§14.15) oder fortgesetzt (§14.16) Anweisungen, die innerhalb der gekennzeichneten Erklärung überall erfolgen. Die Schlüsselwörter const und Goto sind reserviert, obwohl sie derzeit nicht verwendet werden. Dies kann es einem Java -Compiler ermöglichen, bessere Fehlermeldungen zu erstellen, wenn diese C ++ - Schlüsselwörter fälschlicherweise in Programmen angezeigt werden.
- ^ Handbuch für die Seed7 -Programmiersprache 2021.
- ^ PHP -Handbuch 2021.
- ^ Wagner 2021.
- ^ Die GO -Programmiersprachenspezifikation 2021.
- ^ Galer 1962, S. 26–28, 197, 211.
Verweise
- Allain, Alex (2019). "Wann man GOTO in C benutzt". Abgerufen 2021-11-14.
- Andrews, Jeremy (13. Januar 2003). "Linux: Verwenden Sie GOTO im Kernelcode". Archiviert von das Original am 28. November 2005. Abgerufen 2021-11-14.
- Barnes, John (2006-06-30). Programmierung in ADA 2005. Addison Wesley. p. 114-115. ISBN 978-0-321-34078-8.
- Brender, Ronald F. (2002). "Die Bliss -Programmiersprache: Eine Geschichte" (PDF). Software: Übung und Erfahrung. 32 (10): 955–981. doi:10.1002/spe.470. S2CID 45466625.
- Chisnall, David (2012). Objektiv-C-Phrassebook. Addison-Wesley Professional. p.249. ISBN 978-0-321-81375-6.
- Contieri, Maxi (2021-11-02). "Code riechen 100 - Goto". Maximiliano Contieri - Software -Design. Abgerufen 2021-11-14.
- Cozens, Simon (2004-04-16). "Gute Verwendung von Goto". Archiviert von das Original Am 2011-03-19.
- Dijkstra, Edsger W. (März 1968). "Briefe an den Herausgeber: Gehen Sie zu Erklärung als schädlich angesehen." (PDF). Kommunikation der ACM. 11 (3): 147–148. doi:10.1145/362929.362947. S2CID 17469809.
- Dijkstra, Edsger W. Auf einer etwas enttäuschenden Korrespondenz (EWD-1009) (PDF). E. W. Dijkstra Archiv. Zentrum für amerikanische Geschichte, Universität von Texas in Austin. (Transkription)
- Fronczak, Edward J.; Lubbers, Clark E. (September 1974). MTS, Michigan Terminalsystem. Universität von Michigan Computing Center. UOM: 39015034770076.
- Galler, Bernard A. (1. Januar 1962). Die Sprache der Computer (PDF). McGraw-Hill.
- GCC, Die GNU Compiler Collection (2021). "Beschriftungen als Werte - Verwenden der GNU Compiler Collection (GCC)". Gcc.gnu.org. Abgerufen 2021-11-13.
- Geisler, Sandra (2011). C All-in-One-Schreibtischreferenz für Dummies. John Wiley & Sons. S. 217–220. ISBN 978-1-118-05424-6.
- GNU Pascal -Entwicklungsteam (2005). "GNU Pascal -Codierungsstandards". www.gnu-pascal.de. Kostenlose Software -Stiftung. Abgerufen 2021-11-10.
- Gosling, James; McGilton, Henry (Mai 1996). "Die Java -Sprachumgebung". Oracle.com. Abgerufen 2014-07-22.
- Gosling, James; Freude, Bill; Steele, Guy Lewis; Bracha, Gilad (2005). Die Java -Sprachspezifikation (3. Aufl.). Addison-Wesley. ISBN 0-321-24678-0. Archiviert Aus dem Original am 14. Februar 2012. Abgerufen 8. Februar, 2019.
- Goto für Java (6. Juli 2009). "Goto für Java". Steik. Archiviert von das Original am 15. Juni 2012. Abgerufen 28. April, 2012.
- Hindle, Richie (1. April 2004). "Goto für Python". Lösungen der Teilnehmer. Hertford, Großbritannien: Abkommens Solutions Ltd.. Abgerufen 2021-11-10.
- Java Tutorial (2012-02-28). "Verzweigungsaussagen (die Java ™ -Tutorials> Lernen der Java -Sprache> Sprachgrundlagen)". Docs.oracle.com. Abgerufen 2021-11-10.
- Kelsey, R.; CLINGER, W.; Rees, J.; et al. (August 1998). "Überarbeitet5 Bericht über das algorithmische Sprachschema ". Höherer Ordnung und symbolische Berechnung. 11 (1): 7–105. doi:10.1023/a: 1010051815785. S2CID 14069423.
- Kernighan, Brian Wilson; Ritchie, Dennis Macalistair (1988). C Programmiersprache (2. Aufl.). Prentice Hall. ISBN 978-0-13-308621-8.
- Knuth, Donald (1974). "Strukturiertes Programmieren mit Go to Aussagen" (PDF). Computerumfragen. 6 (4): 261–301. Citeseerx 10.1.1.103.6084. doi:10.1145/356635.356640. S2CID 207630080. Archiviert von das Original (PDF) Am 2017-07-17. Abgerufen 2017-01-26.
- Kozen, Dexter; Tseng, Wei-Lung Dustin (2008). "Der Böhm -Jacopini -Theorem ist falsch, aussagekräftig" (PDF). Mathematik der Programmkonstruktion. MPC 2008. Vorlesungsnotizen in Informatik. Vol. 5133. S. 177–192. Citeseerx 10.1.1.218.9241. doi:10.1007/978-3-540-70594-9_11. ISBN 978-3-540-70593-2.
- Lahey Computer Systems, Inc (2004). "Computered Goto Anweisung (veraltet)". Lahey Computer Systems, Inc. archiviert aus das Original am 2016-05-26. Abgerufen 2021-11-10.
- Louden, Kenneth C.; Lambert, Kenneth A. (2012). Programmiersprachen: Prinzipien und Praktiken. Cengage -Lernen. p.422. ISBN 978-1-111-52941-3.
- Handbuch für die SEED7 -Programmiersprache (2021). "Merkmale von Seed7". Abgerufen 2021-11-10.
- McConnell, Steve (Dezember 2004). Code vollständig: Ein praktisches Handbuch der Softwarekonstruktion, zweite Ausgabe (2. Aufl.). Microsoft Press. ISBN 978-0735619678.
- Meyer, Bertrand (2009). Berührung der Klasse: Lernen, gut mit Objekten und Verträgen zu programmieren. Springer Science & Business Media. p. 189. ISBN 978-3-540-92144-8.
- Microsoft (2021). ""On goto" und "on goSub" werden Aussagen nicht mehr unterstützt ". Microsoft. Abgerufen 2021-11-10.
- Noack, Sebastian; Leer, Douglas; Grainger, Thomas; Spacewander (19. September 2015). "Snoack/Python-Goto: Ein Funktionsdekorateur, der den Bytecode umschreibt, um Goto in Python zu ermöglichen.". GitHub. Abgerufen 2021-11-10.
- Perl Syntax Manual (2021). Gehe zu (Bericht). Abgerufen 2021-11-14.
- PHP -Handbuch (2021). "gehe zu". Php. Abgerufen 2021-11-13.
- Pitchford, Mark; Tapp, Chris (2013-02-25). "Misra C: 2012: Viele gute Gründe, sich zu ändern". Elektronisches Design. Abgerufen 2014-07-22.
- Prata, Stephen (2013). C Primer Plus. Addison-Wesley. S. 287–289. ISBN 978-0-13-343238-1.
- Ramshaw, L. (1988). "Eliminierung von Go to's während der Programmstruktur". Journal of the ACM. 35 (4): 893–920. doi:10.1145/48014.48021. S2CID 31001665.
- Regehr, John (4. Februar 2013). "Verwendung von GOTO im Systemcode - in die Wissenschaft eingebettet". Blog.REGehr.org.
- Roberts, Eric S. (März 1995). "Schleifenausgänge und strukturierte Programmierung: Wiedereröffnung der Debatte". ACM Sigcse Bulletin. 27 (1): 268–272. doi:10.1145/199691.199815.
- Rubin, Frank (März 1987). ""Goto gilt als schädlich als schädlich angesehen" (PDF). Kommunikation der ACM. 30 (3): 195–196. doi:10.1145/214748.315722. S2CID 6853038. Archiviert von das Original (PDF) am 2009-03-20.
- Sahni, Sartaj; Cmelik, Bob (1995). Softwareentwicklung in c. Silicon Press. p. 135. ISBN 978-0-929306-16-2.
- Sexton, Alex (2012). "Der Sommer von Goto | offizielles Haus von goto.js". Archiviert vom Original am 25. Oktober 2015.
{{}}
: CS1 Wartung: Ungeeignete URL (Link)
- Abersersleben, Johannes (2006). "Fehler und Ausnahmen - Rechte und Verpflichtungen". In Christophe Dony (Hrsg.). Fortgeschrittene Themen in Ausnahmebehandlungstechniken. Springer Science & Business Media. p.277. ISBN 978-3-540-37443-5.
- Spinellis, Diomidis (27. Mai 2003). Code -Lesung: Die Open Source -Perspektive. Addison-Wesley Professional. S. 43–44. ISBN 978-0-672-33370-5.
- Stack Overflow Fragen (2012-06-11). "Warum" Weiter "wird als C -Verstoß in Misra C: 2004 angesehen?". Paketüberfluss. Abgerufen 2021-11-10.
- Steele, Guy Lewis (Januar 1977). "Debunking des 'teuren Verfahrens rufen Sie Mythos oder Verfahrensanruf -Implementierungen als schädlich an oder lambda: das ultimative Goto". ACM '77: Verfahren der Jahreskonferenz von 1977: 153–162. doi:10.1145/800179.810196. S2CID 9807843.
- Stroustrup, Bjarne (2012-01-09). "Tag 1 Keynote - Bjarne Stroustrup: C ++ 11 Stil | Goingnative 2012 | Kanal 9". Channel9.msdn.com. Abgerufen 2021-11-10.
- Summit, Steve (1995). "comp.lang.c FAQ -Liste · Frage 17.10". C-faq.com. Abgerufen 2021-11-10.
- Die GO -Programmiersprachenspezifikation (26. Juli 2021). "Die GO -Programmiersprache Spezifikation - Die Go -Programmiersprache".
- Torvalds, Linus (2016). "Linux -Kernel -Codierungsstil". Die Dokumentation des Linux -Kernels. Abgerufen 2021-11-10.
- Van Tassel, Dennie (8. Juli 2004). "Geschichte der Beschriftungen in Programmiersprachen". Abgerufen 4. Januar 2011.
- Vine, Michael A. (2007). C Programmierung für den absoluten Anfänger. Cengage -Lernen. ISBN 978-1-59863-634-5.
- Wagner, Bill (2021). "GOTO -Anweisung - C# Referenz". docs.microsoft.com. Abgerufen 2021-11-09.
- Watt, David Anthony;Findlay, William (2004). Programmiersprache Designkonzepte. John Wiley & Sons. p.228. ISBN 978-0-470-85320-7.
- Wehr, Jason (1997). "Gehen Sie zu (zugewiesen)". www.personal.psu.edu/jhm/f90/201.html. Abgerufen 2021-11-13.
- Wilkes, Maurice V.; Wheeler, David J.; Gill, Stanley (1951). Die Vorbereitung von Programmen für einen elektronischen digitalen Computer. Addison-Wesley.
(manchmal genannt WwgNach den Initialen seiner Autoren war das erste Buch über Computerprogrammierung
- Williams, Tom (März 2013). "Überprüfen von Regeln für C: Zuverlässigkeit und Sicherheit sicherstellen". RTC -Magazin. 22 (3): 12–15. Abgerufen 2021-11-10.
- Z/OS 2.5.0 in IBM -Dokumentation (2021). "Computered Goto Anweisung (IBM -Erweiterung)". IBM. Abgerufen 2021-11-13.
Dieses Dokument beschreibt die Syntax-, Semantik- und IBM Z/OS® XL C/C ++ - Implementierung der Programmiersprachen C und C ++.Für eine allgemeine Standardreferenz für C- oder C ++-siehe cppreference.com.