417:
unmaintainable spaghetti code. However, a simple, unthinking ban on the goto statement does not necessarily lead immediately to beautiful programming: an unstructured programmer is just as capable of constructing a
Byzantine tangle without using any goto's (perhaps substituting oddly-nested loops and Boolean control variables, instead). Many programmers adopt a moderate stance: goto's are usually to be avoided, but are acceptable in a few well-constrained situations, if necessary: as multi-level break statements, to coalesce common actions inside a switch statement, or to centralize cleanup tasks in a function with several error returns. (...) Blindly avoiding certain constructs or following rules without understanding them can lead to just as many problems as the rules were supposed to avert. Furthermore, many opinions on programming style are just that: opinions. They may be strongly argued and strongly felt, they may be backed up by solid-seeming evidence and arguments, but the opposing opinions may be just as strongly felt, supported, and argued. It's usually futile to get dragged into "style wars", because on certain issues, opponents can never seem to agree, or agree to disagree, or stop arguing.
245:(1966) did not settle the question of whether to adopt structured programming for software development, partly because the construction was more likely to obscure a program than to improve it because its application requires the introduction of additional local variables. It did, however, spark a prominent debate among computer scientists, educators, language designers and application programmers that saw a slow but steady shift away from the formerly ubiquitous use of the GOTO. Probably the most famous criticism of GOTO is a 1968 letter by Edsger Dijkstra called "
730:, a language where procedure calls are ubiquitous, this form of optimization considerably reduces the cost of a procedure call compared to the GOTO used in other languages. Steele argued that poorly implemented procedure calls had led to an artificial perception that the GOTO was cheap compared to the procedure call. Steele further argued that "in general procedure calls may be usefully thought of as GOTO statements which also pass parameters, and can be uniformly coded as
38:
249:". In that letter, Dijkstra argued that unrestricted GOTO statements should be abolished from higher-level languages because they complicated the task of analyzing and verifying the correctness of programs (particularly those involving loops). The letter itself sparked a debate, including a ""GOTO Considered Harmful" Considered Harmful" letter sent to
1172:, which can be used to implement both the "assigned goto" and the "computed goto." PL/I allows branches out of the current block. A calling procedure can pass a label as an argument to a called procedure which can then exit with a branch. The value of a label variable includes the address of a stack frame, and a goto out of block pops the stack.
793:), but not execution position. A combination of state variables and structured control, notably an overall switch statement, can allow a subroutine to resume execution at an arbitrary point on subsequent calls, and is a structured alternative to goto statements in the absence of coroutines; this is a common idiom in C, for example.
1587:"The unbridled use of the goto statement has as an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress. ... The 'go to' statement as it stands is just too primitive, it is too much an invitation to make a mess of one's program."
1079:
in documentation of the C compilers that support it; its semantics are a superset of
Fortran's assigned goto, because it allows arbitrary pointer expressions as the goto target, while Fortran's assigned goto doesn't allow arbitrary expressions as jump target. As with the standard goto in C, the GNU C
459:
Implementing multi-level break and continue if not directly supported in the language; this is a common idiom in C. Although Java reserves the goto keyword, it doesn't actually implement it. Instead, Java implements labelled break and labelled continue statements. According to the Java documentation,
2286:
Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break (§14.15) or continue (§14.16) statements appearing anywhere within the labeled statement. The keywords const and goto are reserved, even though they are not currently used. This may
746:
Although Steele's paper did not introduce much that was new to computer science, at least as it was practised at MIT, it brought to light the scope for procedure call optimization, which made the modularity-promoting qualities of procedures into a more credible alternative to the then-common coding
734:
JUMP instructions", with the machine code stack manipulation instructions "considered an optimization (rather than vice versa!)". Steele cited evidence that well optimized numerical algorithms in Lisp could execute faster than code produced by then-available commercial
Fortran compilers because the
293:
is "infinitely abusable", but also suggest that it could be used for end-of-function error handlers and for multi-level breaks from loops. These two patterns can be found in numerous subsequent books on C by other authors; a 2007 introductory textbook notes that the error handling pattern is a way
426:
While overall usage of goto has been declining, there are still situations in some languages where a goto provides the shortest and most straightforward way to express a program's logic (while it is possible to express the same logic without gotos, the equivalent code will be longer and often more
380:
introduced structured programming constructs in 1978, and in successive revisions the relatively loose semantic rules governing the allowable use of goto were tightened; the "extended range" in which a programmer could use a GOTO to leave and re-enter a still-executing DO loop was removed from the
811:
is similar to a GOTO in that it transfers control from an arbitrary point in the program to a previously marked point. A continuation is more flexible than GOTO in those languages that support it, because it can transfer control out of the current function, something that a GOTO cannot do in most
416:
Programming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules. In the case of the goto statement, it has long been observed that unfettered use of goto's quickly leads to
725:
summarized the debate over the GOTO and structured programming, and observed that procedure calls in the tail position of a procedure can be most optimally treated as a direct transfer of control to the called procedure, typically eliminating unnecessary stack manipulation operations. Since such
661:
the structure, returning control to enclosing blocks or functions, but do not jump to arbitrary code locations. These are analogous to the use of a return statement in non-terminal position – not strictly structured, due to early exit, but a mild relaxation of the strictures of structured
337:
in sheep's clothing". A slightly modified form of the Böhm–Jacopini result, however, allows the avoidance of additional variables in structured programming, as long as multi-level breaks from loops are allowed. Because some languages like C don't allow multi-level breaks via their
971:
variant that transfers control to a statement label (line number) which is stored in (assigned to) an integer variable. Jumping to an integer variable that had not been ASSIGNed to was unfortunately possible, and was a major source of bugs involving assigned gotos. The
Fortran
1178:/* This implements the equivalent of */ /* the computed goto */ declare where (5) label; declare inx fixed; where(1) = abc; where(2) = xyz; ... goto where(inx); ... abc: /* statement */ ; ... xyz: /* statement */ ; ...
306:, also object to Dijkstra's point of view, stating that GOTOs can be a useful language feature, improving program speed, size and code clarity, but only when used in a sensible way by a comparably sensible programmer. According to computer science professor
843:, continuations can even move control from an outer context to an inner one if desired. This almost limitless control over what code is executed next makes complex control structures such as coroutines and cooperative multitasking relatively easy to write.
976:
statement only allows a constant (existing) line number to be assigned to the integer variable. However, some compilers allowed accidentally treating this variable as an integer thereafter, for example increment it, resulting in unspecified behavior at
776:
are a more radical relaxation of structured programming, allowing not only multiple exit points (as in returns in non-tail position), but also multiple entry points, similar to goto statements. Coroutines are more restricted than goto, as they can only
1156:
There are several programming languages that do not support GOTO by default. By using GOTO emulation, it is still possible to use GOTO in these programming languages, albeit with some restrictions. One can emulate GOTO in Java, JavaScript, and Python.
747:
habits of large monolithic procedures with complex internal control structures and extensive state data. In particular, the tail call optimizations discussed by Steele turned the procedure into a credible way of implementing iteration through single
500:
These uses are relatively common in C, but much less common in C++ or other languages with higher-level features. However, throwing and catching an exception inside a function can be extraordinarily inefficient in some languages; a prime example is
1845:
ISO/IEC 1539-1:1997. Information technology – Programming languages – Fortran – Part 1: Base language. Informally known as
Fortran 95. There are a further two parts to this standard. Part 1 has been formally adopted by
1192:/* This implements the equivalent of */ /* the computed goto */ declare inx fixed; ... goto where(inx); ... where(1): /* statement */ ; ... where(2): /* statement */ ; ...
520:. For example, given a large function where only certain code is of interest, a goto statement allows one to jump to or from only the relevant code, without otherwise modifying the function. This usage is considered
812:
structured programming languages. In those language implementations that maintain stack frames for storage of local variables and function arguments, executing a continuation involves adjusting the program's
3824:
This document describes the syntax, semantics, and IBM z/OS XL C/C++ implementation of the C and C++ programming languages. For a general-purpose C or C++ standard reference, see cppreference.com.
467:
Surrogates for single-level break or continue (retry) statements when the potential introduction of additional loops could incorrectly affect the control flow. This practice has been observed in
460:
the use of gotos for multi-level breaks was the most common (90%) use of gotos in C. Java was not the first language to take this approach—forbidding goto, but providing multi-level breaks— the
1405:. However, it does not allow jumping to a label outside of the current scope, and respects object disposal and finally constructs, making it significantly less powerful and dangerous than the
1175:/* This implements the equivalent of */ /* the assigned goto */ declare where label; where = somewhere; goto where; ... somewhere: /* statement */ ; ...
646:
In practice, a strict adherence to the basic three-structure template of structured programming yields highly nested code, due to inability to exit a structured unit prematurely, and a
381:
language in 1978, and by 1995 several forms of
Fortran GOTO, including the Computed GOTO and the Assigned GOTO, had been deleted. Some widely used modern programming languages such as
146:
is that code that uses goto statements is harder to understand than alternative constructions. Debates over its (more limited) uses continue in academia and software industry circles.
474:
Error handling (in absence of exceptions), particularly cleanup code such as resource deallocation. C++ offers an alternative to goto statement for this use case, which is :
401:
on to the next step of an iteration. The viewpoint that disturbing the control flow in code is undesirable may be seen in the design of some programming languages, for instance
3763:
1836:
ANSI X3.9-1978. American
National Standard – Programming Language FORTRAN. American National Standards Institute. Also known as ISO 1539-1980, informally known as FORTRAN 77
119:; some combination of the three programming constructs of sequence, selection/choice, and repetition/iteration are sufficient for any computation that can be performed by a
321:
from the middle of loops are bad practice as they are not needed in the Böhm–Jacopini result, and thus advocated that loops should have a single exit point. For instance,
1124:
standard had the ALTER statement which could be used to change the destination of an existing GO TO, which had to be in a paragraph by itself. The feature, which allowed
1080:
extension allows the target of the computed goto to reside only in the current function. Attempting to jump outside the current function results in unspecified behavior.
1144:
statement that is not a traditional GOTO statement at all. It takes a function name and transfers control by effectively substituting one function call for another (a
781:
a currently running coroutine at specified points – continuing after a yield – rather than jumping to an arbitrary point in the code. A limited form of coroutines are
553:. This resulted in the ability to structure programs using well-nested executions of routines drawn from a library. This would not have been possible using only
1379:
files generate GOTOs and LABELs. Python does not have support for goto, although there are several joke modules that provide it. There is no goto statement in
142:
are generally used if available. In the past, there was considerable debate in academia and industry on the merits of the use of goto statements. The primary
1436:
programing language has a GOTO statement that unwinds the stack for an out of block transfer and does not permit a transfer into a block from outside of it.
873:. In these cases, the individual components do not have arbitrary transfer of control, but the overall control may be scheduled in complex ways, such as via
632:
Under certain conditions it is possible to eliminate local goto statements of legacy programs by replacing them with multilevel loop exit statements.
2924:
707:
The throw-catch exception handling mechanisms can also be easily abused to create non-transparent control structures, just like goto can be abused.
549:. To implement a call and return on a machine without a subroutine call instruction, he used a special pattern of self-modifying code, known as a
370:
from "required" to "advisory" status; the 2012 edition has an additional, mandatory rule that prohibits only backward, but not forward jumps with
3836:
3106:
3035:
3510:
886:
3365:
3573:
2333:
202:
does not permit a jump to a label contained within another function, however jumps within a single call chain are possible using the
629:
s. Multi-way branching replaces the "computed goto" in which the instruction to jump to is determined dynamically (conditionally).
3623:
3530:(January 1977). "Debunking the "expensive procedure call" myth or, procedure call implementations considered harmful or, LAMBDA".
1454:
Most languages that have goto statements call it that, but in the early days of computing, other names were used. For example, in
2999:. 9th International Conference MPC 2008. Lecture Notes in Computer Science. Vol. 5133. Marseille France. pp. 177_192.
2543:
226:, who later became the iconic opponent of GOTO. The 1970s and 1980s saw a decline in the use of GOTO statements in favor of the
475:
3717:
3667:
3497:
3474:
3420:
3268:
3146:
3073:
3022:
2908:
2681:
2509:
2442:
2787:
2768:
1989:
252:
3754:
3125:
1148:): the new function will not return to the GOTO, but instead to the place from which the original function was called.
542:
222:
explicitly cast doubt on the necessity of GOTO statements; at the time no one paid attention to his remark, including
3812:
3549:
2762:
1439:
Other languages may have their own separate keywords for explicit fallthroughs, which can be considered a version of
1451:
for explicit fallthrough by default, but also allows setting implicit fallthrough as default behavior for a module.
688:
statement. In some languages multi-level breaks are also possible. For handling exceptional situations, specialized
427:
difficult to understand). In other languages, there are structured alternatives, notably exceptions and tail calls.
2426:
3680:
824:
is an example of an escape continuation that may be used to escape the current context to a surrounding one. The
2639:
2405:
1125:
241:
coding standards, for example the GNU Pascal Coding
Standards, recommend against the use of GOTO statements. The
1083:
Some variants of BASIC also support a computed GOTO in the sense used in GNU C, i.e. in which the target can be
3242:
1394:
3447:
2610:
1621:
840:
736:
561:
386:
294:
to work around the "lack of built-in exception handling within the C language". Other programmers, including
2287:
allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.
677:
398:
3457:
Siedersleben, Johannes (2006). "Errors and
Exceptions - Rights and Obligations". In Christophe Dony (ed.).
1056:
Several C compilers implement two non-standard C/C++ extensions relating to gotos originally introduced by
782:
653:
Two solutions have been generally adopted: a way to exit a structured unit prematurely, and more generally
496:
Specialized scripting languages that operate in a linear manner, such as a dialogue system for video games.
77:
1557:
3864:
3433:
2965:
2616:
1627:
1472:
Functional programming languages such as Scheme generally do not have goto, instead using continuations.
1364:
890:
870:
857:
In non-procedural paradigms, goto is less relevant or completely absent. One of the main alternatives is
727:
382:
1204:, Goto directs execution to a label that begins with a colon. The target of the Goto can be a variable.
2836:
1506:
1459:
1455:
866:
833:
786:
621:
These new language mechanisms replaced equivalent flows which previously would have been written using
402:
277:
242:
108:
2455:
169:
93:
3162:
3005:
2944:
3709:
3065:
2693:
1088:
821:
3086:
1060:. The GNU extension allows the address of a label inside the current function to be obtained as a
271:, which analyzes many common programming tasks and finds that in some of them GOTO is the optimal
3854:
3641:
3039:
1057:
673:
647:
61:
3184:"snoack/python-goto: A function decorator, that rewrites the bytecode, to enable goto in Python"
2837:"Branching Statements (The Java Tutorials > Learning the Java Language > Language Basics)"
2501:
486:
and longjmp are another alternative, and have the advantage of being able to unwind part of the
406:
3466:
3000:
2939:
874:
565:
464:
programming language (more precisely the BLISS-11 version thereof) preceded it in this respect.
445:
227:
199:
131:
3410:
2626:
453:
3859:
3730:
3487:
3396:
940:
jumps to one of several labels in a list, based on the value of an expression. An example is
557:, since the target code, being drawn from the library, would not know where to jump back to.
449:
31:
30:
This article is about the programming statement in high-level languages. For other uses, see
3701:
3458:
3224:
3057:
2722:
2193:
The ALTER statement was deemed obsolete in the COBOL 1985 standard and deleted in 2002; see
2989:
2655:
862:
756:
441:
230:
65:
17:
8:
3702:
3574:"Day 1 Keynote - Bjarne Stroustrup: C++11 Style | GoingNative 2012 | Channel 9"
3058:
2601:
2561:
1612:
1398:
194:
Programming languages impose different restrictions with respect to the destination of a
134:
in the 1960s and 1970s, its use has declined significantly. It remains in use in certain
2697:
3555:
3527:
3388:
3303:
2957:
2874:
2744:
2598:
2584:
2494:
2478:
1609:
1429:
is often used as an explicit replacement for implicit fallthrough, which C# disallows.
740:
689:
654:
641:
573:
479:
272:
256:(CACM) in March 1987, as well as further replies by other people, including Dijkstra's
223:
3182:
Noack, Sebastian; Blank, Douglas; Grainger, Thomas; spacewander (September 19, 2015).
2522:
412:
Entry 17.10 in comp.lang.c FAQ list addresses the issue of GOTO use directly, stating
3830:
3713:
3663:
3609:
3569:
3545:
3493:
3470:
3459:
3441:
3416:
3264:
3142:
3121:
3100:
3069:
3018:
2961:
2904:
2897:
2758:
2677:
2547:
2505:
2438:
2352:
2290:
313:
Other academics took a more extreme viewpoint and argued that even instructions like
238:
3307:
2878:
2854:
2588:
2482:
1645:
3559:
3535:
3392:
3380:
3348:
3293:
3010:
2949:
2866:
2576:
2470:
1496:
1418:
945:
752:
751:(tail recursion calling the same function). Further, tail call optimization allows
605:
517:
366:
statements. The 2012 edition of the MISRA C standard downgraded the prohibition on
124:
1530:
3014:
2888:
2752:
2557:
2388:
2194:
1500:
858:
852:
790:
755:
of unbounded depth, assuming tail calls – this allows transfer of control, as in
663:
615:
394:
303:
282:
2795:
1486:
828:
GO operator also has this stack unwinding property, despite the construct being
310:, in 2013, there were about 100,000 instances of goto in the Linux kernel code.
76:
normally returns control. The jumped-to locations are usually identified using
3768:
3750:
3619:
2892:
2434:
2165:
2163:
817:
748:
322:
299:
286:
234:
120:
2870:
3848:
2718:
1372:
829:
722:
587:
219:
96:, in some cases combined with a stack adjustment. Many languages support the
3118:
Code
Complete: A Practical Handbook of Software Construction, Second Edition
2267:
2265:
2160:
885:
were among the first to introduce the concepts of messages and objects. By
3758:
2985:
2920:
2748:
2148:
1469:
C has goto, and it is commonly used in various idioms, as discussed above.
1391:
until version 5.3 (libraries were available to emulate its functionality).
961:
924:
808:
802:
731:
550:
478:(RAII) through using destructors or using try and catch exceptions used in
393:– though most provide some means of breaking out of a selection, or either
264:
85:
3786:
3540:
3384:
3353:
3336:
2953:
2580:
1383:
and hidden gotos like break- and continue-statements are also omitted. In
3777:, after its authors' initials) was the first book on computer programming
3610:"The Go Programming Language Specification - the Go Programming Language"
3607:
3317:
3084:
2358:
2296:
2262:
2105:, which means that the program jumps to label 20, 30 or 40, in case that
1447:
keyword and doesn't allow implicit fallthrough at all, while Perl 5 uses
1071:. The goto instruction is also extended to allow jumping to an arbitrary
825:
650:
with quite complex program state data to handle all possible conditions.
513:
509:
502:
307:
81:
46:
3591:
3298:
3281:
3206:
3183:
893:
reduced software complexity to interactions (messages) between objects.
2112:
1201:
901:
There are a number of different language constructs under the class of
813:
581:
569:
538:
521:
487:
116:
73:
3321:
2409:
115:
statement is not necessary to write programs that can be expressed as
37:
3166:
3158:
1145:
882:
773:
768:
716:
2474:
1794:
3139:
Touch of Class: Learning to Program Well with Objects and Contracts
2740:
1481:
597:
759:, which otherwise is generally accomplished with goto statements.
2364:
930:
377:
347:
3511:"Why "continue" is considered as a C violation in MISRA C:2004?"
2653:
2169:
2089:
2087:
1095:
to jump to the line numbered 1000 times the value of a variable
785:, which are sufficient for some purposes. Even more limited are
452:), particularly in automatically generated C code. For example,
3810:
3188:
2154:
1994:
878:
721:
In a paper delivered to the ACM conference in Seattle in 1977,
483:
468:
203:
3764:
The Preparation of Programs for an Electronic Digital Computer
2853:
Kelsey, R.; Clinger, W.; Rees, J.; et al. (August 1998).
2631:. University of Michigan Computing Center. UOM:39015034770076.
2211:
2175:
1443:
restricted to this specific purpose. For example, Go uses the
3337:"Loop exits and structured programming: reopening the debate"
3181:
3163:"'On GoTo' and 'On GoSub' statements are no longer supported"
2271:
2084:
2033:
1491:
1380:
1121:
1099:(which might represent a selected menu option, for example).
953:
546:
461:
295:
215:
130:
The use of goto was formerly common, but since the advent of
50:
2656:"Labels as Values - Using the GNU Compiler Collection (GCC)"
508:
Another use of goto statements is to modify poorly factored
3033:
2995:. In Audebaud, Philippe; Paulin-Mohring, Christine (eds.).
2814:
2692:
2562:"Letters to the editor: Go to statement considered harmful"
2118:
1915:
1563:
1433:
1165:
1137:
1102:
3608:
The Go Programming Language Specification (26 July 2021).
1927:
1707:
1705:
1703:
1701:
981:
time. The following code demonstrates the behavior of the
2625:
Fronczak, Edward J.; Lubbers, Clark E. (September 1974).
2223:
1903:
1806:
1384:
1344:
buy Seltzer in case somebody wants a zero calorie drink.
437:
To make smaller programs, and get rid of code duplication
3508:
3282:"Eliminating go to's while preserving program structure"
2057:
1944:
1942:
1800:
1569:
832:, as the label to be jumped to can be referenced from a
572:(also known as procedures or functions) towards further
3787:"Checking Rules for C: Assuring Reliability and Safety"
1878:
1876:
1698:
1087:
line number, not just one from a list. For example, in
3532:
Proceedings of the 1977 annual conference on - ACM '77
3141:. Springer Science & Business Media. p. 189.
2738:
2609:. E.W. Dijkstra Archive. Center for American History,
2302:
2283:
2199:
1969:
1782:
1724:
1722:
1720:
1664:
1662:
1660:
1620:. E.W. Dijkstra Archive. Center for American History,
1547:
1545:
1518:
1409:
keyword in other programming languages. It also makes
952:
construct is the recommended syntactical alternative.
2990:"The Böhm_Jacopini Theorem Is False, Propositionally"
2603:
On a Somewhat Disappointing Correspondence (EWD-1009)
2252:
2250:
2124:
2074:
2072:
1959:
1957:
1939:
1893:
1891:
1734:
1614:
On a Somewhat Disappointing Correspondence (EWD-1009)
1181:
A simpler way to get an equivalent result is using a
967:
In versions prior to Fortran 95, Fortran also had an
735:
cost of a procedure call in Lisp was much lower. In
342:
keyword, some textbooks advise the programmer to use
3434:"The Summer of Goto | Official Home of Goto.js"
3322:"Use of Goto in Systems Code – Embedded in Academia"
2021:
2009:
1873:
1818:
1185:
that doesn't even need an explicit declaration of a
233:, with GOTO criticized as leading to unmaintainable
127:
and additional variables may need to be introduced.
2855:"Revised Report on the Algorithmic Language Scheme"
2109:
is either less than, equal to or greater than zero.
2045:
1758:
1717:
1674:
1657:
1542:
434:
To make the code more readable and easier to follow
3204:
3085:Manual for the Seed7 programming language (2021).
2896:
2493:
2314:
2247:
2235:
2217:
2069:
1954:
1888:
1861:
1849:
1746:
908:
430:Situations in which goto is often useful include:
325:wrote in his 2009 textbook that instructions like
72:of control to another line of code; in contrast a
3749:
3465:. Springer Science & Business Media. p.
3436:. Archived from the original on October 25, 2015.
2852:
2334:"GoTo Statement - Visual Basic | Microsoft Learn"
2093:
2039:
1770:
1686:
1075:expression. This C extension is referred to as a
448:and goto to switch between states (in absence of
27:One-way control statement in computer programming
3846:
3461:Advanced Topics in Exception Handling Techniques
3243:"MISRA C:2012: Plenty Of Good Reasons To Change"
3056:Louden, Kenneth C.; Lambert, Kenneth A. (2012).
2887:
2136:
1651:
1633:
1590:
1536:
1417:statements labels, whose scope is the enclosing
512:, where avoiding a goto would require extensive
3492:. Addison-Wesley Professional. pp. 43–44.
3060:Programming Languages: Principles and Practices
2717:
2624:
2181:
1921:
1328:buy Calzone to take home - today is Wednesday.
3700:Watt, David Anthony; Findlay, William (2004).
3366:""GOTO Considered Harmful" Considered Harmful"
2925:"Structured Programming with go to Statements"
2359:The Go Programming Language Specification 2021
2297:Manual for the Seed7 programming language 2021
960:statement that achieved the same goal, but in
3240:
3055:
3038:. Lahey Computer Systems, Inc. Archived from
2834:
2785:
2229:
1909:
1812:
1575:
505:, where a goto is a much faster alternative.
3642:"History of Labels in Programming Languages"
3456:
2063:
1128:, was frequently condemned and seldom used.
405:visually emphasizes label definitions using
269:Structured Programming with go to Statements
172:to cause a conditional transfer of control.
3835:: CS1 maint: numeric names: authors list (
3699:
3408:
3241:Pitchford, Mark; Tapp, Chris (2013-02-25).
3105:: CS1 maint: numeric names: authors list (
2676:. John Wiley & Sons. pp. 217–220.
2456:"The BLISS programming language: a history"
1711:
1524:
1312:buy pizza for lunch - Monday is Pizza day.
1108:achieve the effect of computed or assigned
3639:
3568:
3222:
2984:
2308:
2205:
1975:
1788:
739:, a Lisp dialect developed by Steele with
258:On a Somewhat Disappointing Correspondence
135:
3813:"Computed goto statement (IBM extension)"
3539:
3489:Code Reading: The Open Source Perspective
3485:
3352:
3297:
3157:
3115:
3004:
2943:
2654:GCC, the GNU Compiler Collection (2021).
2130:
1948:
1740:
532:
263:An alternative viewpoint is presented in
3811:z/OS 2.5.0 in IBM Documentation (2021).
3784:
3618:
2556:
2520:
2491:
2027:
2015:
1882:
1824:
1551:
789:– subroutines which maintain state (via
493:Popping the stack in, e.g., Algol, PL/I.
421:
36:
3660:C Programming for the Absolute Beginner
3592:"comp.lang.c FAQ list · Question 17.10"
3509:Stack Overflow Questions (2012-06-11).
3334:
3279:
3036:"Computed GOTO Statement (obsolescent)"
2674:C All-in-One Desk Reference For Dummies
2671:
2500:. Addison-Wesley Professional. p.
2453:
2403:
2051:
1933:
1764:
1728:
1680:
1566:, 5.1 Assorted Pascal Programming Tips.
1160:
964:this construct is no longer supported.
944:. The equivalent construct in C is the
861:, which is of particular importance in
743:, tail call optimization is mandatory.
49:home computer, implemented with native
14:
3847:
3678:
3589:
3526:
3431:
3316:
2988:; Tseng, Wei-Lung Dustin (July 2008).
2812:
2771:from the original on February 14, 2012
2638:Galler, Bernard A. (January 1, 1962).
2637:
2541:
2527:Maximiliano Contieri - Software Design
2425:
2386:
2370:
2320:
2256:
2241:
2078:
1963:
1897:
1867:
1855:
1752:
1654:, pp. 65–66, 3.8 Goto and Labels.
476:Resource Acquisition Is Initialization
3735:www.personal.psu.edu/jhm/f90/201.html
3363:
3258:
3136:
2919:
2859:Higher-Order and Symbolic Computation
2821:. Hertford, UK: Entrian Solutions Ltd
2170:GCC, the GNU Compiler Collection 2021
1776:
1692:
1639:
1596:
1375:, but is unusable, although compiled
1051:"this is valid line number"
390:
302:or software engineer and book author
168:statement is often combined with the
101:
3728:
3704:Programming language design concepts
3657:
3263:. Addison-Wesley. pp. 287–289.
3034:Lahey Computer Systems, Inc (2004).
2597:
2155:z/OS 2.5.0 in IBM Documentation 2021
2142:
1987:
1668:
1608:
1539:, p. 224, A9.6 Jump Statements.
1458:the TRANSFER TO statement was used.
560:Later, high-level languages such as
3640:Van Tassel, Dennie (July 8, 2004).
3486:Spinellis, Diomidis (27 May 2003).
3409:Sahni, Sartaj; Cmelik, Bob (1995).
2997:Mathematics of Program Construction
2404:Andrews, Jeremy (13 January 2003).
1990:"nathanhoad/godot_dialogue_manager"
1354:
24:
3626:. The Linux Kernel’s documentation
3116:McConnell, Steve (December 2004).
2406:"Linux: Using goto In Kernel Code"
846:
247:Go-to statement considered harmful
25:
3876:
3708:. John Wiley & Sons. p.
3120:(2nd ed.). Microsoft Press.
2463:Software: Practice and Experience
564:were designed around support for
139:
2813:Hindle, Richie (April 1, 2004).
2757:(3rd ed.). Addison-Wesley.
2119:Lahey Computer Systems, Inc 2004
1564:GNU Pascal development team 2005
1387:there was no native support for
1151:
796:
726:"tail calls" are very common in
100:statement, and many do not (see
3681:"goto statement - C# Reference"
3335:Roberts, Eric S. (March 1995).
2903:(2nd ed.). Prentice Hall.
2754:The Java Language Specification
2723:"The Java Language Environment"
2326:
2277:
2187:
2099:
2094:Kelsey, Clinger & Rees 1998
2040:Wilkes, Wheeler & Gill 1951
1981:
1839:
1830:
1363:statement, and many do not. In
692:constructs were added, such as
527:
454:goto in the canonical LR parser
3415:. Silicon Press. p. 135.
2786:GOTO for Java (July 6, 2009).
2721:; McGilton, Henry (May 1996).
2195:COBOL > Self-modifying code
1602:
1581:
1195:
678:continue to the next iteration
389:lack the GOTO statement – see
143:
13:
1:
2698:"GNU Pascal Coding Standards"
2628:MTS, Michigan Terminal System
2611:University of Texas at Austin
2521:Contieri, Maxi (2021-11-02).
2379:
1988:Hoad, Nathan (28 July 2022).
1801:Stack Overflow Questions 2012
1622:University of Texas at Austin
1462:uses a right pointing arrow,
896:
762:
710:
680:, without requiring an extra
635:
3785:Williams, Tom (March 2013).
3064:. Cengage Learning. p.
3015:10.1007/978-3-540-70594-9_11
2835:Java Tutorial (2012-02-28).
2542:Cozens, Simon (2004-04-16).
2431:Programming in Ada 2005
1652:Kernighan & Ritchie 1988
1537:Kernighan & Ritchie 1988
1140:, there is a variant of the
1131:
877:. The influential languages
524:, but finds occasional use.
209:
198:statement. For example, the
80:, though some languages use
7:
3624:"Linux Kernel Coding Style"
3364:Rubin, Frank (March 1987).
3205:Perl syntax manual (2021).
2893:Ritchie, Dennis MacAlistair
2694:GNU Pascal development team
2454:Brender, Ronald F. (2002).
2373:, pp. 26–28, 197, 211.
2182:Fronczak & Lubbers 1974
1922:Gosling & McGilton 1996
1475:
1359:Many languages support the
891:object-oriented programming
871:object oriented programming
816:in addition to a jump. The
346:in such circumstances. The
10:
3881:
2704:. Free Software Foundation
1507:Non-structured programming
922:
867:interprocess communication
850:
800:
766:
714:
639:
298:kernel designer and coder
278:The C Programming Language
109:structured program theorem
29:
3658:Vine, Michael A. (2007).
3446:: CS1 maint: unfit URL (
3412:Software Development in C
3373:Communications of the ACM
2641:The Language of Computers
2569:Communications of the ACM
1813:Pitchford & Tapp 2013
1576:Louden & Lambert 2012
1296:, is not a shopping day.
948:, and in newer Fortran a
657:– in both cases these go
568:, which generalized from
3137:Meyer, Bertrand (2009).
2672:Geisler, Sandra (2011).
2492:Chisnall, David (2012).
1512:
1206:
1115:
1064:using the unary, prefix
991:
149:
94:branch or jump statement
53:(one-key command entry).
3259:Prata, Stephen (2013).
2889:Kernighan, Brian Wilson
2871:10.1023/A:1010051815785
2523:"Code Smell 100 - GoTo"
2389:"When To Use Goto in C"
2218:Perl syntax manual 2021
1712:Sahni & Cmelik 1995
1525:Watt & Findlay 2004
648:combinatorial explosion
123:, with the caveat that
64:found in many computer
3590:Summit, Steve (1995).
2899:C Programming Language
2496:Objective-C Phrasebook
1789:Kozen & Tseng 2008
1091:BASIC one could write
1027:! unspecified behavior
822:C programming language
614:statements, a form of
566:structured programming
533:Structured programming
446:state transition table
419:
358:, as well as multiple
251:Communications of the
228:structured programming
218:meeting held in 1959,
200:C programming language
132:structured programming
54:
3679:Wagner, Bill (2021).
3541:10.1145/800179.810196
3432:Sexton, Alex (2012).
3385:10.1145/214748.315722
3354:10.1145/199691.199815
2954:10.1145/356635.356640
2581:10.1145/362929.362947
2387:Allain, Alex (2019).
2284:Gosling et al. (2005)
1503:(or conditional goto)
757:finite state machines
640:Further information:
545:when programming the
537:The modern notion of
450:tail call elimination
422:Common usage patterns
414:
136:common usage patterns
66:programming languages
40:
32:Goto (disambiguation)
3731:"Go to ( assigned )"
3729:Wehr, Jason (1997).
3662:. Cengage Learning.
3534:. pp. 153–162.
3320:(February 4, 2013).
3280:Ramshaw, L. (1988).
1183:label constant array
1161:PL/I label variables
1120:Up to the 1985 ANSI
1066:label value operator
863:concurrent computing
442:finite-state machine
3576:. Channel9.msdn.com
3341:ACM SIGCSE Bulletin
3299:10.1145/48014.48021
3245:. Electronic Design
3223:PHP Manual (2021).
3087:"Features of Seed7"
2599:Dijkstra, Edsger W.
2558:Dijkstra, Edsger W.
2544:"Good uses of goto"
2437:. p. 114-115.
2412:on 28 November 2005
2340:. 15 September 2021
1936:, pp. 960–965.
1610:Dijkstra, Edsger W.
662:programming. In C,
350:2004 standard bans
243:Böhm–Jacopini proof
3865:Edsger W. Dijkstra
3773:(sometimes called
3751:Wilkes, Maurice V.
3685:docs.microsoft.com
3570:Stroustrup, Bjarne
3286:Journal of the ACM
2230:GOTO for Java 2009
1910:Java Tutorial 2012
1168:has the data type
741:Gerald Jay Sussman
690:exception handling
642:Exception handling
616:multiway branching
574:control structures
480:Exception handling
333:"are just the old
273:language construct
224:Edsger W. Dijkstra
102:§ language support
55:
45:" key on the 1982
3755:Wheeler, David J.
3719:978-0-470-85320-7
3669:978-1-59863-634-5
3528:Steele, Guy Lewis
3499:978-0-672-33370-5
3476:978-3-540-37443-5
3422:978-0-929306-16-2
3270:978-0-13-343238-1
3148:978-3-540-92144-8
3075:978-1-111-52941-3
3024:978-3-540-70593-2
2932:Computing Surveys
2910:978-0-13-308621-8
2839:. Docs.oracle.com
2819:Entrian Solutions
2815:"goto for Python"
2745:Steele, Guy Lewis
2702:www.gnu-pascal.de
2683:978-1-118-05424-6
2511:978-0-321-81375-6
2444:978-0-321-34078-8
2272:Noack et al. 2015
2064:Siedersleben 2006
1399:Visual Basic .NET
942:goto (20,30,40) i
239:programming style
68:. It performs a
16:(Redirected from
3872:
3840:
3834:
3826:
3821:
3820:
3805:
3803:
3802:
3779:
3744:
3742:
3741:
3723:
3707:
3694:
3692:
3691:
3673:
3652:
3650:
3648:
3634:
3632:
3631:
3613:
3602:
3600:
3599:
3584:
3582:
3581:
3563:
3543:
3521:
3519:
3518:
3513:. Stack Overflow
3503:
3480:
3464:
3451:
3445:
3437:
3426:
3403:
3401:
3395:. Archived from
3370:
3358:
3356:
3329:
3311:
3301:
3274:
3253:
3251:
3250:
3235:
3233:
3232:
3217:
3215:
3214:
3199:
3197:
3196:
3176:
3174:
3173:
3152:
3131:
3110:
3104:
3096:
3094:
3093:
3079:
3063:
3050:
3048:
3047:
3028:
3008:
2994:
2979:
2977:
2976:
2970:
2964:. Archived from
2947:
2929:
2914:
2902:
2882:
2847:
2845:
2844:
2829:
2827:
2826:
2807:
2805:
2803:
2798:on June 15, 2012
2794:. Archived from
2780:
2778:
2776:
2739:Gosling, James;
2733:
2731:
2730:
2712:
2710:
2709:
2687:
2666:
2664:
2663:
2648:
2646:
2632:
2614:
2608:
2592:
2566:
2551:
2546:. Archived from
2536:
2534:
2533:
2515:
2499:
2486:
2460:
2448:
2420:
2418:
2417:
2408:. Archived from
2398:
2396:
2395:
2374:
2368:
2362:
2356:
2350:
2349:
2347:
2345:
2330:
2324:
2318:
2312:
2306:
2300:
2294:
2288:
2281:
2275:
2269:
2260:
2254:
2245:
2239:
2233:
2227:
2221:
2215:
2209:
2203:
2197:
2191:
2185:
2179:
2173:
2167:
2158:
2152:
2146:
2140:
2134:
2128:
2122:
2116:
2110:
2103:
2097:
2091:
2082:
2076:
2067:
2061:
2055:
2049:
2043:
2037:
2031:
2025:
2019:
2013:
2007:
2006:
2004:
2002:
1985:
1979:
1973:
1967:
1961:
1952:
1946:
1937:
1931:
1925:
1919:
1913:
1907:
1901:
1895:
1886:
1880:
1871:
1865:
1859:
1853:
1847:
1843:
1837:
1834:
1828:
1822:
1816:
1810:
1804:
1798:
1792:
1786:
1780:
1774:
1768:
1762:
1756:
1750:
1744:
1738:
1732:
1726:
1715:
1709:
1696:
1690:
1684:
1678:
1672:
1666:
1655:
1649:
1643:
1637:
1631:
1625:
1619:
1606:
1600:
1594:
1588:
1585:
1579:
1573:
1567:
1561:
1555:
1549:
1540:
1534:
1528:
1522:
1497:Switch statement
1465:
1450:
1446:
1442:
1419:switch statement
1408:
1404:
1390:
1378:
1370:
1362:
1355:Language support
1350:
1347:
1343:
1340:
1337:
1334:
1331:
1327:
1324:
1321:
1318:
1315:
1311:
1308:
1305:
1302:
1299:
1295:
1291:
1288:
1285:
1282:
1279:
1276:
1273:
1270:
1267:
1264:
1261:
1258:
1255:
1251:
1248:
1244:
1241:
1238:
1235:
1232:
1229:
1226:
1223:
1220:
1217:
1213:
1210:
1143:
1111:
1094:
1074:
1070:
1063:
1052:
1049:
1046:
1043:
1040:
1037:
1034:
1031:
1028:
1025:
1022:
1019:
1016:
1013:
1010:
1007:
1004:
1001:
998:
995:
989:is unspecified:
984:
980:
975:
959:
951:
946:switch statement
943:
938:
919:
918:
913:
912:
830:lexically scoped
820:function of the
791:static variables
753:mutual recursion
703:
699:
695:
687:
683:
674:terminate a loop
671:
666:
628:
624:
613:
608:
600:
594:
590:
584:
556:
541:was invented by
518:code duplication
391:language support
373:
369:
365:
361:
357:
353:
345:
341:
336:
332:
328:
320:
316:
292:
197:
191:
167:
161:
125:code duplication
114:
111:proved that the
99:
91:
70:one-way transfer
21:
3880:
3879:
3875:
3874:
3873:
3871:
3870:
3869:
3845:
3844:
3843:
3828:
3827:
3818:
3816:
3800:
3798:
3739:
3737:
3720:
3689:
3687:
3670:
3646:
3644:
3629:
3627:
3620:Torvalds, Linus
3597:
3595:
3579:
3577:
3552:
3516:
3514:
3500:
3477:
3439:
3438:
3423:
3399:
3368:
3326:blog.regehr.org
3271:
3248:
3246:
3230:
3228:
3212:
3210:
3194:
3192:
3171:
3169:
3149:
3128:
3098:
3097:
3091:
3089:
3076:
3045:
3043:
3025:
3006:10.1.1.218.9241
2992:
2974:
2972:
2968:
2945:10.1.1.103.6084
2927:
2911:
2842:
2840:
2824:
2822:
2801:
2799:
2788:"GOTO for Java"
2774:
2772:
2765:
2728:
2726:
2707:
2705:
2684:
2661:
2659:
2644:
2606:
2564:
2531:
2529:
2512:
2475:10.1002/spe.470
2469:(10): 955–981.
2458:
2445:
2415:
2413:
2393:
2391:
2382:
2377:
2369:
2365:
2357:
2353:
2343:
2341:
2338:Microsoft Learn
2332:
2331:
2327:
2319:
2315:
2309:PHP Manual 2021
2307:
2303:
2295:
2291:
2282:
2278:
2270:
2263:
2255:
2248:
2240:
2236:
2228:
2224:
2216:
2212:
2206:Van Tassel 2004
2204:
2200:
2192:
2188:
2180:
2176:
2168:
2161:
2153:
2149:
2141:
2137:
2129:
2125:
2117:
2113:
2104:
2100:
2092:
2085:
2077:
2070:
2062:
2058:
2050:
2046:
2038:
2034:
2026:
2022:
2014:
2010:
2000:
1998:
1986:
1982:
1976:Stroustrup 2012
1974:
1970:
1962:
1955:
1947:
1940:
1932:
1928:
1920:
1916:
1908:
1904:
1896:
1889:
1881:
1874:
1866:
1862:
1854:
1850:
1844:
1840:
1835:
1831:
1823:
1819:
1811:
1807:
1799:
1795:
1787:
1783:
1775:
1771:
1763:
1759:
1751:
1747:
1739:
1735:
1727:
1718:
1710:
1699:
1691:
1687:
1679:
1675:
1667:
1658:
1650:
1646:
1638:
1634:
1617:
1607:
1603:
1595:
1591:
1586:
1582:
1574:
1570:
1562:
1558:
1550:
1543:
1535:
1531:
1523:
1519:
1515:
1501:multiway branch
1478:
1463:
1448:
1444:
1440:
1406:
1402:
1388:
1376:
1368:
1360:
1357:
1352:
1351:
1348:
1345:
1341:
1338:
1335:
1332:
1329:
1325:
1322:
1319:
1316:
1313:
1309:
1306:
1303:
1300:
1297:
1293:
1289:
1286:
1283:
1280:
1277:
1274:
1271:
1268:
1265:
1262:
1259:
1256:
1253:
1249:
1246:
1242:
1239:
1236:
1233:
1230:
1227:
1224:
1221:
1218:
1215:
1211:
1208:
1198:
1193:
1189:type variable:
1179:
1176:
1163:
1154:
1141:
1134:
1118:
1109:
1106:label variables
1092:
1072:
1068:
1061:
1054:
1053:
1050:
1047:
1044:
1041:
1038:
1035:
1032:
1029:
1026:
1023:
1020:
1017:
1014:
1011:
1008:
1005:
1002:
999:
996:
993:
988:
982:
978:
973:
957:
949:
941:
936:
927:
921:
916:
915:
910:
909:
899:
859:message passing
855:
853:Message passing
849:
847:Message passing
805:
799:
771:
765:
719:
713:
701:
697:
693:
685:
681:
669:
664:
644:
638:
626:
622:
611:
606:
598:
592:
588:
582:
554:
535:
530:
424:
371:
367:
363:
359:
355:
351:
343:
339:
334:
330:
326:
318:
314:
304:Steve McConnell
290:
283:Brian Kernighan
212:
195:
175:
165:
154:
152:
112:
97:
89:
35:
28:
23:
22:
15:
12:
11:
5:
3878:
3868:
3867:
3862:
3857:
3855:BASIC commands
3842:
3841:
3807:
3806:
3781:
3780:
3769:Addison-Wesley
3746:
3745:
3725:
3724:
3718:
3696:
3695:
3675:
3674:
3668:
3654:
3653:
3636:
3635:
3615:
3614:
3604:
3603:
3586:
3585:
3572:(2012-01-09).
3565:
3564:
3550:
3523:
3522:
3505:
3504:
3498:
3482:
3481:
3475:
3453:
3452:
3428:
3427:
3421:
3405:
3404:
3402:on 2009-03-20.
3379:(3): 195–196.
3360:
3359:
3347:(1): 268–272.
3331:
3330:
3313:
3312:
3292:(4): 893–920.
3276:
3275:
3269:
3255:
3254:
3237:
3236:
3219:
3218:
3201:
3200:
3178:
3177:
3154:
3153:
3147:
3133:
3132:
3127:978-0735619678
3126:
3112:
3111:
3081:
3080:
3074:
3052:
3051:
3030:
3029:
3023:
2981:
2980:
2938:(4): 261–301.
2916:
2915:
2909:
2884:
2883:
2849:
2848:
2831:
2830:
2809:
2808:
2782:
2781:
2763:
2735:
2734:
2719:Gosling, James
2714:
2713:
2689:
2688:
2682:
2668:
2667:
2650:
2649:
2647:. McGraw-Hill.
2634:
2633:
2621:
2620:
2594:
2593:
2575:(3): 147–148.
2560:(March 1968).
2553:
2552:
2550:on 2011-03-19.
2538:
2537:
2517:
2516:
2510:
2488:
2487:
2450:
2449:
2443:
2435:Addison Wesley
2429:(2006-06-30).
2422:
2421:
2400:
2399:
2383:
2381:
2378:
2376:
2375:
2363:
2351:
2325:
2313:
2301:
2289:
2276:
2261:
2246:
2234:
2222:
2210:
2198:
2186:
2184:, p. 226.
2174:
2159:
2147:
2135:
2131:Microsoft 2021
2123:
2111:
2098:
2083:
2068:
2056:
2044:
2032:
2020:
2008:
1980:
1968:
1953:
1949:Spinellis 2003
1938:
1926:
1914:
1902:
1887:
1872:
1860:
1848:
1838:
1829:
1817:
1805:
1793:
1781:
1769:
1757:
1745:
1741:McConnell 2004
1733:
1716:
1697:
1685:
1673:
1671:, p. 262.
1656:
1644:
1632:
1601:
1589:
1580:
1568:
1556:
1541:
1529:
1516:
1514:
1511:
1510:
1509:
1504:
1494:
1489:
1484:
1477:
1474:
1356:
1353:
1207:
1197:
1194:
1191:
1177:
1174:
1162:
1159:
1153:
1150:
1133:
1130:
1117:
1114:
992:
986:
920:
907:
898:
895:
851:Main article:
848:
845:
801:Main article:
798:
795:
767:Main article:
764:
761:
749:tail recursion
715:Main article:
712:
709:
637:
634:
619:
618:
603:
534:
531:
529:
526:
498:
497:
494:
491:
472:
465:
457:
438:
435:
423:
420:
407:angle brackets
323:Bertrand Meyer
300:Linus Torvalds
287:Dennis Ritchie
235:spaghetti code
211:
208:
204:setjmp/longjmp
151:
148:
121:Turing machine
26:
9:
6:
4:
3:
2:
3877:
3866:
3863:
3861:
3858:
3856:
3853:
3852:
3850:
3838:
3832:
3825:
3814:
3809:
3808:
3796:
3792:
3788:
3783:
3782:
3778:
3776:
3770:
3766:
3765:
3760:
3759:Gill, Stanley
3756:
3752:
3748:
3747:
3736:
3732:
3727:
3726:
3721:
3715:
3711:
3706:
3705:
3698:
3697:
3686:
3682:
3677:
3676:
3671:
3665:
3661:
3656:
3655:
3643:
3638:
3637:
3625:
3621:
3617:
3616:
3611:
3606:
3605:
3593:
3588:
3587:
3575:
3571:
3567:
3566:
3561:
3557:
3553:
3551:9781450323086
3547:
3542:
3537:
3533:
3529:
3525:
3524:
3512:
3507:
3506:
3501:
3495:
3491:
3490:
3484:
3483:
3478:
3472:
3468:
3463:
3462:
3455:
3454:
3449:
3443:
3435:
3430:
3429:
3424:
3418:
3414:
3413:
3407:
3406:
3398:
3394:
3390:
3386:
3382:
3378:
3374:
3367:
3362:
3361:
3355:
3350:
3346:
3342:
3338:
3333:
3332:
3327:
3323:
3319:
3315:
3314:
3309:
3305:
3300:
3295:
3291:
3287:
3283:
3278:
3277:
3272:
3266:
3262:
3261:C Primer Plus
3257:
3256:
3244:
3239:
3238:
3226:
3221:
3220:
3208:
3203:
3202:
3191:
3190:
3185:
3180:
3179:
3168:
3164:
3160:
3156:
3155:
3150:
3144:
3140:
3135:
3134:
3129:
3123:
3119:
3114:
3113:
3108:
3102:
3088:
3083:
3082:
3077:
3071:
3067:
3062:
3061:
3054:
3053:
3042:on 2016-05-26
3041:
3037:
3032:
3031:
3026:
3020:
3016:
3012:
3007:
3002:
2998:
2991:
2987:
2986:Kozen, Dexter
2983:
2982:
2971:on 2017-07-17
2967:
2963:
2959:
2955:
2951:
2946:
2941:
2937:
2933:
2926:
2922:
2921:Knuth, Donald
2918:
2917:
2912:
2906:
2901:
2900:
2894:
2890:
2886:
2885:
2880:
2876:
2872:
2868:
2864:
2860:
2856:
2851:
2850:
2838:
2833:
2832:
2820:
2816:
2811:
2810:
2797:
2793:
2789:
2784:
2783:
2770:
2766:
2764:0-321-24678-0
2760:
2756:
2755:
2750:
2749:Bracha, Gilad
2746:
2742:
2737:
2736:
2724:
2720:
2716:
2715:
2703:
2699:
2695:
2691:
2690:
2685:
2679:
2675:
2670:
2669:
2658:. Gcc.gnu.org
2657:
2652:
2651:
2643:
2642:
2636:
2635:
2630:
2629:
2623:
2622:
2618:
2617:transcription
2612:
2605:
2604:
2600:
2596:
2595:
2590:
2586:
2582:
2578:
2574:
2570:
2563:
2559:
2555:
2554:
2549:
2545:
2540:
2539:
2528:
2524:
2519:
2518:
2513:
2507:
2503:
2498:
2497:
2490:
2489:
2484:
2480:
2476:
2472:
2468:
2464:
2457:
2452:
2451:
2446:
2440:
2436:
2432:
2428:
2424:
2423:
2411:
2407:
2402:
2401:
2390:
2385:
2384:
2372:
2367:
2360:
2355:
2339:
2335:
2329:
2322:
2317:
2310:
2305:
2298:
2293:
2285:
2280:
2273:
2268:
2266:
2258:
2253:
2251:
2243:
2238:
2231:
2226:
2219:
2214:
2207:
2202:
2196:
2190:
2183:
2178:
2171:
2166:
2164:
2156:
2151:
2144:
2139:
2132:
2127:
2120:
2115:
2108:
2102:
2095:
2090:
2088:
2080:
2075:
2073:
2065:
2060:
2053:
2048:
2041:
2036:
2029:
2028:Contieri 2021
2024:
2017:
2016:Chisnall 2012
2012:
1997:
1996:
1991:
1984:
1977:
1972:
1965:
1960:
1958:
1950:
1945:
1943:
1935:
1930:
1923:
1918:
1911:
1906:
1899:
1894:
1892:
1884:
1883:Torvalds 2016
1879:
1877:
1869:
1864:
1857:
1852:
1842:
1833:
1826:
1825:Williams 2013
1821:
1814:
1809:
1802:
1797:
1790:
1785:
1778:
1773:
1766:
1761:
1754:
1749:
1742:
1737:
1730:
1725:
1723:
1721:
1713:
1708:
1706:
1704:
1702:
1694:
1689:
1682:
1677:
1670:
1665:
1663:
1661:
1653:
1648:
1641:
1636:
1630:) (May, 1987)
1629:
1628:transcription
1623:
1616:
1615:
1611:
1605:
1598:
1593:
1584:
1577:
1572:
1565:
1560:
1553:
1552:Dijkstra 1968
1548:
1546:
1538:
1533:
1526:
1521:
1517:
1508:
1505:
1502:
1498:
1495:
1493:
1490:
1488:
1485:
1483:
1480:
1479:
1473:
1470:
1467:
1461:
1457:
1452:
1437:
1435:
1430:
1428:
1424:
1420:
1416:
1412:
1401:both support
1400:
1396:
1392:
1386:
1382:
1374:
1373:reserved word
1366:
1205:
1203:
1190:
1188:
1184:
1173:
1171:
1167:
1158:
1152:Emulated GOTO
1149:
1147:
1139:
1129:
1127:
1123:
1113:
1107:
1104:
1100:
1098:
1090:
1086:
1081:
1078:
1077:computed goto
1067:
1059:
990:
970:
969:assigned goto
965:
963:
955:
947:
939:
932:
926:
917:Assigned GOTO
911:Computed GOTO
906:
904:
894:
892:
888:
887:encapsulating
884:
880:
876:
872:
868:
864:
860:
854:
844:
842:
837:
835:
831:
827:
823:
819:
815:
810:
804:
797:Continuations
794:
792:
788:
784:
780:
775:
770:
760:
758:
754:
750:
744:
742:
738:
733:
729:
724:
723:Guy L. Steele
718:
708:
705:
691:
679:
675:
672:allow one to
667:
660:
656:
651:
649:
643:
633:
630:
617:
609:
604:
601:
595:
585:
579:
578:
577:
575:
571:
567:
563:
558:
552:
548:
544:
543:David Wheeler
540:
525:
523:
519:
515:
511:
506:
504:
495:
492:
489:
485:
481:
477:
473:
470:
466:
463:
458:
455:
451:
447:
443:
439:
436:
433:
432:
431:
428:
418:
413:
410:
408:
404:
400:
396:
392:
388:
384:
379:
375:
349:
324:
311:
309:
305:
301:
297:
288:
284:
280:
279:
274:
270:
266:
261:
259:
255:
254:
248:
244:
240:
236:
232:
229:
225:
221:
220:Heinz Zemanek
217:
207:
205:
201:
192:
190:
187:
184:
181:
178:
173:
171:
162:
160:
157:
147:
145:
141:
137:
133:
128:
126:
122:
118:
110:
105:
103:
95:
92:is a form of
87:
83:
79:
75:
74:function call
71:
67:
63:
59:
52:
48:
44:
39:
33:
19:
3860:Control flow
3823:
3817:. Retrieved
3799:. Retrieved
3794:
3791:RTC Magazine
3790:
3774:
3772:
3762:
3738:. Retrieved
3734:
3703:
3688:. Retrieved
3684:
3659:
3645:. Retrieved
3628:. Retrieved
3596:. Retrieved
3578:. Retrieved
3531:
3515:. Retrieved
3488:
3460:
3411:
3397:the original
3376:
3372:
3344:
3340:
3325:
3318:Regehr, John
3289:
3285:
3260:
3247:. Retrieved
3229:. Retrieved
3211:. Retrieved
3193:. Retrieved
3187:
3170:. Retrieved
3138:
3117:
3090:. Retrieved
3059:
3044:. Retrieved
3040:the original
2996:
2973:. Retrieved
2966:the original
2935:
2931:
2898:
2865:(1): 7–105.
2862:
2858:
2841:. Retrieved
2823:. Retrieved
2818:
2800:. Retrieved
2796:the original
2791:
2773:. Retrieved
2753:
2727:. Retrieved
2725:. Oracle.com
2706:. Retrieved
2701:
2673:
2660:. Retrieved
2640:
2627:
2602:
2572:
2568:
2548:the original
2530:. Retrieved
2526:
2495:
2466:
2462:
2430:
2427:Barnes, John
2414:. Retrieved
2410:the original
2392:. Retrieved
2366:
2354:
2344:25 September
2342:. Retrieved
2337:
2328:
2316:
2304:
2292:
2279:
2237:
2225:
2213:
2201:
2189:
2177:
2150:
2138:
2126:
2114:
2106:
2101:
2059:
2052:Ramshaw 1988
2047:
2035:
2023:
2011:
1999:. Retrieved
1993:
1983:
1971:
1934:Brender 2002
1929:
1917:
1905:
1863:
1851:
1841:
1832:
1820:
1808:
1796:
1784:
1772:
1765:Roberts 1995
1760:
1748:
1736:
1729:Andrews 2003
1688:
1681:Geisler 2011
1676:
1647:
1635:
1613:
1604:
1592:
1583:
1571:
1559:
1532:
1520:
1487:Control flow
1471:
1468:
1453:
1438:
1431:
1427:goto default
1426:
1422:
1414:
1410:
1393:
1358:
1237:%D8str:~0,3%
1199:
1186:
1182:
1180:
1169:
1164:
1155:
1135:
1126:polymorphism
1119:
1105:
1101:
1096:
1084:
1082:
1076:
1065:
1055:
968:
966:
962:Visual Basic
934:
928:
925:Branch table
905:statements.
902:
900:
889:state data,
856:
838:
809:continuation
806:
803:Continuation
778:
772:
745:
732:machine code
720:
706:
658:
652:
645:
631:
620:
589:repeat until
580:Loops using
559:
551:Wheeler jump
536:
528:Alternatives
507:
499:
440:Implement a
429:
425:
415:
411:
376:
312:
276:
268:
265:Donald Knuth
262:
257:
250:
246:
213:
193:
188:
185:
182:
179:
176:
174:
170:if statement
163:
158:
155:
153:
140:alternatives
129:
106:
86:machine code
82:line numbers
69:
57:
56:
42:
3594:. C-faq.com
2775:February 8,
2371:Galler 1962
2321:Wagner 2021
2257:Hindle 2004
2242:Sexton 2012
2079:Steele 1977
1964:Allain 2019
1898:Cozens 2004
1868:Summit 1995
1856:Barnes 2006
1753:Regehr 2013
1445:fallthrough
1252:Mon Wed Fri
1196:MS/DOS GOTO
1093:GOTO i*1000
950:SELECT CASE
826:Common Lisp
570:subroutines
514:refactoring
510:legacy code
503:Objective-C
308:John Regehr
275:to use. In
206:functions.
117:flow charts
47:ZX Spectrum
3849:Categories
3819:2021-11-13
3801:2021-11-10
3797:(3): 12–15
3740:2021-11-13
3690:2021-11-09
3630:2021-11-10
3598:2021-11-10
3580:2021-11-10
3517:2021-11-10
3249:2014-07-22
3231:2021-11-13
3213:2021-11-14
3195:2021-11-10
3172:2021-11-10
3092:2021-11-10
3046:2021-11-10
2975:2017-01-26
2843:2021-11-10
2825:2021-11-10
2729:2014-07-22
2708:2021-11-10
2662:2021-11-13
2532:2021-11-14
2416:2021-11-14
2394:2021-11-14
2380:References
2001:3 February
1777:Meyer 2009
1693:Prata 2013
1640:Knuth 1974
1597:Rubin 1987
1466:for goto.
1202:batch file
1069:&&
985:when line
923:See also:
897:Variations
875:preemption
814:call stack
783:generators
774:Coroutines
763:Coroutines
711:Tail calls
655:exceptions
636:Exceptions
602:statements
539:subroutine
522:code smell
488:call stack
444:, using a
397:out of or
289:warn that
3647:4 January
3167:Microsoft
3159:Microsoft
3001:CiteSeerX
2962:207630080
2940:CiteSeerX
2802:April 28,
2741:Joy, Bill
2143:Wehr 1997
1669:Vine 2007
1423:goto case
1200:In a DOS
1146:tail call
1132:Perl GOTO
958:'On GoTo'
935:computed
883:Smalltalk
769:Coroutine
717:Tail call
704:in Java.
576:such as:
216:pre-ALGOL
210:Criticism
180:condition
144:criticism
88:level, a
84:. At the
62:statement
3831:cite web
3761:(1951).
3622:(2016).
3442:cite web
3308:31001665
3209:(Report)
3161:(2021).
3101:cite web
2923:(1974).
2895:(1988).
2879:14069423
2769:Archived
2751:(2005).
2696:(2005).
2589:17469809
2483:45466625
1482:COMEFROM
1476:See also
787:closures
670:continue
395:breaking
356:continue
331:continue
231:paradigm
3560:9807843
3393:6853038
1415:default
1339:SHOPFri
1323:SHOPWed
1307:SHOPMon
1294:%D8dow%
1292:Today,
1287:SHOP%%D
1278:%D8dow%
1269:D"
994:assign
931:Fortran
834:closure
818:longjmp
702:finally
610:a.k.a.
378:FORTRAN
348:MISRA C
237:. Some
214:At the
3716:
3666:
3558:
3548:
3496:
3473:
3419:
3391:
3306:
3267:
3225:"goto"
3189:GitHub
3145:
3124:
3072:
3021:
3003:
2960:
2942:
2907:
2877:
2761:
2680:
2587:
2508:
2481:
2441:
1995:GitHub
1377:.class
1281:"
1275:"
1263:"
1225:%date%
983:goto i
974:assign
956:had a
879:Simula
869:, and
841:Scheme
779:resume
737:Scheme
625:s and
607:switch
596:, and
562:Pascal
484:setjmp
469:Netbsd
399:moving
387:Python
360:return
319:return
138:, but
78:labels
3815:. IBM
3556:S2CID
3400:(PDF)
3389:S2CID
3369:(PDF)
3304:S2CID
3227:. PHP
2993:(PDF)
2969:(PDF)
2958:S2CID
2928:(PDF)
2875:S2CID
2792:steik
2645:(PDF)
2607:(PDF)
2585:S2CID
2565:(PDF)
2479:S2CID
2459:(PDF)
1846:ANSI.
1618:(PDF)
1513:Notes
1492:GOSUB
1381:Seed7
1371:is a
1231:D8dow
1219:D8str
1187:LABEL
1170:LABEL
1122:COBOL
1116:ALTER
1073:void*
1062:void*
1033:write
954:BASIC
698:catch
682:while
665:break
583:while
547:EDSAC
471:code.
462:BLISS
364:break
340:break
327:break
315:break
296:Linux
189:label
159:label
150:Usage
60:is a
51:BASIC
3837:link
3714:ISBN
3664:ISBN
3649:2011
3546:ISBN
3494:ISBN
3471:ISBN
3448:link
3417:ISBN
3265:ISBN
3207:Goto
3143:ISBN
3122:ISBN
3107:link
3070:ISBN
3019:ISBN
2905:ISBN
2804:2012
2777:2019
2759:ISBN
2678:ISBN
2506:ISBN
2439:ISBN
2346:2023
2003:2023
1499:– a
1449:next
1441:goto
1434:PL/I
1432:The
1413:and
1411:case
1407:goto
1403:goto
1397:and
1389:goto
1369:goto
1365:Java
1361:goto
1342:echo
1330:goto
1326:echo
1314:goto
1310:echo
1298:goto
1290:echo
1284:goto
1214:off
1212:echo
1166:PL/I
1142:goto
1138:Perl
1110:GOTO
1103:PL/I
1021:goto
979:goto
937:GOTO
933:, a
914:and
903:goto
881:and
728:Lisp
668:and
623:goto
612:case
555:goto
385:and
383:Java
372:goto
368:goto
362:and
352:goto
344:goto
335:goto
329:and
317:and
291:goto
285:and
196:goto
186:goto
183:THEN
166:goto
164:The
156:goto
113:goto
107:The
98:goto
90:goto
58:Goto
43:GOTO
18:GOTO
3775:WWG
3710:228
3536:doi
3467:277
3381:doi
3349:doi
3294:doi
3066:422
3011:doi
2950:doi
2867:doi
2577:doi
2502:249
2471:doi
1460:APL
1456:MAD
1425:or
1385:PHP
1349:end
1333:end
1317:end
1301:end
1240:FOR
1228:SET
1216:SET
1136:In
1112:s.
1089:MTS
1085:any
1058:gcc
1030:200
997:200
929:In
839:In
694:try
684:or
676:or
599:for
591:or
516:or
403:Ada
267:'s
253:ACM
104:).
3851::
3833:}}
3829:{{
3822:.
3795:22
3793:.
3789:.
3771:.
3767:.
3757:;
3753:;
3733:.
3712:.
3683:.
3554:.
3544:.
3469:.
3444:}}
3440:{{
3387:.
3377:30
3375:.
3371:.
3345:27
3343:.
3339:.
3324:.
3302:.
3290:35
3288:.
3284:.
3186:.
3165:.
3103:}}
3099:{{
3068:.
3017:.
3009:.
2956:.
2948:.
2934:.
2930:.
2891:;
2873:.
2863:11
2861:.
2857:.
2817:.
2790:.
2767:.
2747:;
2743:;
2700:.
2583:.
2573:11
2571:.
2567:.
2525:.
2504:.
2477:.
2467:32
2465:.
2461:.
2433:.
2336:.
2264:^
2249:^
2162:^
2086:^
2071:^
1992:.
1956:^
1941:^
1890:^
1875:^
1719:^
1700:^
1659:^
1544:^
1421:;
1395:C#
1367:,
1272:==
1266:%%
1260:if
1257:do
1247:in
1245:D
1243:%%
1000:to
865:,
836:.
807:A
686:if
659:up
627:if
593:do
586:,
482:.
409:.
374:.
354:,
281:,
260:.
177:IF
3839:)
3804:.
3743:.
3722:.
3693:.
3672:.
3651:.
3633:.
3612:.
3601:.
3583:.
3562:.
3538::
3520:.
3502:.
3479:.
3450:)
3425:.
3383::
3357:.
3351::
3328:.
3310:.
3296::
3273:.
3252:.
3234:.
3216:.
3198:.
3175:.
3151:.
3130:.
3109:)
3095:.
3078:.
3049:.
3027:.
3013::
2978:.
2952::
2936:6
2913:.
2881:.
2869::
2846:.
2828:.
2806:.
2779:.
2732:.
2711:.
2686:.
2665:.
2619:)
2615:(
2613:.
2591:.
2579::
2535:.
2514:.
2485:.
2473::
2447:.
2419:.
2397:.
2361:.
2348:.
2323:.
2311:.
2299:.
2274:.
2259:.
2244:.
2232:.
2220:.
2208:.
2172:.
2157:.
2145:.
2133:.
2121:.
2107:i
2096:.
2081:.
2066:.
2054:.
2042:.
2030:.
2018:.
2005:.
1978:.
1966:.
1951:.
1924:.
1912:.
1900:.
1885:.
1870:.
1858:.
1827:.
1815:.
1803:.
1791:.
1779:.
1767:.
1755:.
1743:.
1731:.
1714:.
1695:.
1683:.
1642:.
1626:(
1624:.
1599:.
1578:.
1554:.
1527:.
1464:→
1346::
1336::
1320::
1304::
1254:)
1250:(
1234:=
1222:=
1209:@
1097:i
1048:)
1045:*
1042:,
1039:*
1036:(
1024:i
1018:1
1015:+
1012:i
1009:=
1006:i
1003:i
987:i
700:/
696:/
490:.
456:.
41:"
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.