[Home] [Prev] [Next] [Index]
5.8 Goto Statements
5.8 Goto Statements
- 1
- [A goto_statement specifies an explicit transfer of control from this statement to a target statement with a given label.]
- Syntax
- 2
- goto_statement ::= goto label_name;
- Name Resolution Rules
- 3
- The label_name shall resolve to denote a label; the statement with that label is the target statement.
- Legality Rules
- 4
- The innermost sequence_of_statements that encloses the target statement shall also enclose the goto_statement.
- 4.a
- Ramification: The goto_statement can be a statement of an inner
sequence_.
-
- 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.
- 4.b
- Ramification: It follows from the previous rule that if the target statement is enclosed by such a construct, then the goto_statement cannot be outside.
- Dynamic Semantics
- 5
- 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
- 6 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
- 7
- Example of a loop containing a goto statement:
- 8
- <<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;
[Home] [Prev] [Next] [Index]
documentation@rational.com
Copyright © 1993-1998, Rational Software Corporation. All rights
reserved.