goto 문 (C++)goto Statement (C++)

goto 문은 지정 된 식별자로 레이블이 지정 된 문으로 제어를 무조건 전송 합니다.The goto statement unconditionally transfers control to the statement labeled by the specified identifier.


goto identifier;


identifier에 의해 지정된 레이블 문은 현재 함수에 있어야 합니다.The labeled statement designated by identifier must be in the current function. 모든 identifier 이름은 내부 네임스페이스의 멤버이므로 다른 식별자를 방해하지 않습니다.All identifier names are members of an internal namespace and therefore do not interfere with other identifiers.

문 레이블은 문에만 의미가 있으며 goto , 그렇지 않은 경우에는 문 레이블이 무시 됩니다.A statement label is meaningful only to a goto statement; otherwise, statement labels are ignored. 레이블을 다시 선언할 수 없습니다.Labels cannot be redeclared.

goto 문은 해당 위치의 범위에 있는 변수의 초기화를 건너뛴 위치로 제어를 전달할 수 없습니다.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. 다음 예에서는 C2362을 발생 시킵니다.The following example raises C2362:

int goto_fn(bool b)
    if (!b)
        goto exit;  // C2362
    { /*...*/ }

    int error_code = 42;

    return error_code;

break continue return 가능 하면 문 대신, 및 문을 사용 하는 것이 좋은 프로그래밍 스타일입니다 goto .It is good programming style to use the break, continue, and return statements instead of the goto statement whenever possible. 그러나 break 문은 한 수준의 루프 에서만 종료 되므로 문을 사용 하 여 goto 깊게 중첩 된 루프를 종료 해야 할 수도 있습니다.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.

레이블 및 문에 대 한 자세한 내용은 레이블 goto 을 참조 하십시오.For more information about labels and the goto statement, see Labeled Statements.


이 예제에서 문은가 goto 3 인 경우 레이블이 지정 된 지점으로 제어를 전달 stop i 합니다.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 );

    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

참고 항목See also

점프 문Jump Statements