The goto
statement transfers control to a statement that is marked by a label.
The target of a goto
identifier statement is the labeled statement with the given label. If a label with the given name does not exist in the current function member, or if the goto
statement is not within the scope of the label, a compile-time error occurs.
The target of a goto
case
statement is the statement list of the switch section in the nearest enclosing switch
statement that contains a case
label with the given constant value. If the goto
case
statement is not enclosed by a switch
statement, if the constant-expression is not implicitly convertible (§6.1) to the governing type of the nearest enclosing switch
statement, or if the nearest enclosing switch
statement does not contain a case
label with the given constant value, a compile-time error occurs.
The target of a goto
default
statement is the statement list of the switch section in the nearest enclosing switch
statement (§8.7.2) that contains a default
label. If the goto
default
statement is not enclosed by a switch
statement, or if the nearest enclosing switch
statement does not contain a default
label, a compile-time error occurs.
A goto
statement cannot exit a finally
block (§8.10). When a goto
statement occurs within a finally
block, the target of the goto
statement must be within the same finally
block, or otherwise a compile-time error occurs.
A goto
statement is executed as follows:
goto
statement exits one or more try
blocks with associated finally
blocks, control is initially transferred to the finally
block of the innermost try
statement. When and if control reaches the end point of a finally
block, control is transferred to the finally
block of the next enclosing try
statement. This process is repeated until the finally
blocks of all intervening try
statements have been executed.goto
statement.Because a goto
statement unconditionally transfers control elsewhere, the end point of a goto
statement is never reachable.