5.8 Goto Statements
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
[A goto_statement
specifies an explicit transfer of control from this statement
to a target statement with a given label.]
Syntax
2goto_statement
::=
goto label_name
;
Name Resolution Rules
3The label_name
shall resolve to denote a label
; the statement
with that label
is the target statement.
Legality Rules
4The 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.
statement
is enclosed by such a construct, then the goto_statement
cannot be outside. Dynamic Semantics
5The 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.
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_handler
s; or from an exception_handler
of a handled_sequence_of_statements
back to its sequence_of_statements
. Examples
7Example 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;