5.8 Goto Statements

From OC Systems Wiki!
< Guide:95lrm
Revision as of 23:38, 4 May 2019 by imported>WikiVisor (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

A goto_statement specifies an explicit transfer of control from this statement to a target statement with a given label.

Syntax

goto_statement ::= goto label_name;

Name Resolution Rules

The label_name shall resolve to denote a label; the statement with that label is the target statement.

Legality Rules

The innermost sequence_of_statements that encloses the target statement shall also enclose the goto_statement. Furthermore, if a goto_statement is enclosed by an accept_statement or a body, then the target statement shall not be outside this enclosing construct.

Dynamic Semantics

The execution of a goto_statement transfers control to the target statement, completing the execution of any compound_statement that encloses the goto_statement but does not enclose the target.

Notes

10  The above rules allow transfer of control to a statement of an enclosing sequence_of_statements but not the reverse. Similarly, they prohibit transfers of control such as between alternatives of a case_statement, if_statement, or select_statement; between exception_handlers; or from an exception_handler of a handled_sequence_of_statements back to its sequence_of_statements.

Examples

Example of a loop containing a goto statement:

<<Sort>>
for I in 1 .. N-1 loop 
    if A(I) > A(I+1) then
        Exchange(A(I), A(I+1));
        goto Sort; 
    end if;
end loop;

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual