Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The goto
statement unconditionally transfers control to the statement labeled by the specified identifier.
Syntax
goto identifier;
Remarks
The labeled statement designated by identifier
must be in the current function. All identifier
names are members of an internal namespace and therefore do not interfere with other identifiers.
A statement label is meaningful only to a goto
statement; otherwise, statement labels are ignored. Labels cannot be redeclared.
A goto
statement is not allowed to transfer control to a location that skips over the initialization of any variable that is in scope in that location. The following example raises C2362:
int goto_fn(bool b)
{
if (!b)
{
goto exit; // C2362
}
else
{ /*...*/ }
int error_code = 42;
exit:
return error_code;
}
It is good programming style to use the break
, continue
, and return
statements instead of the goto
statement whenever possible. However, because the break
statement exits from only one level of a loop, you might have to use a goto
statement to exit a deeply nested loop.
For more information about labels and the goto
statement, see Labeled Statements.
Example
In this example, a goto
statement transfers control to the point labeled stop
when i
equals 3.
// goto_statement.cpp
#include <stdio.h>
int main()
{
int i, j;
for ( i = 0; i < 10; i++ )
{
printf_s( "Outer loop executing. i = %d\n", i );
for ( j = 0; j < 2; j++ )
{
printf_s( " Inner loop executing. j = %d\n", j );
if ( i == 3 )
goto stop;
}
}
// This message does not print:
printf_s( "Loop exited. i = %d\n", i );
stop:
printf_s( "Jumped to stop. i = %d\n", i );
}
Outer loop executing. i = 0
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 1
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 2
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 3
Inner loop executing. j = 0
Jumped to stop. i = 3