goto 및 레이블 문 (C)goto and Labeled Statements (C)

goto 문은 레이블에 제어를 전송합니다.The goto statement transfers control to a label. 지정된 레이블은 동일한 함수에 있어야 하며 동일한 함수에서 하나의 문 앞에만 나타날 수 있습니다.The given label must reside in the same function and can appear before only one statement in the same function.

구문Syntax

statement:statement:
labeled-statementlabeled-statement

jump-statementjump-statement

점프 문:jump-statement:
goto identifier ;goto identifier ;

labeled-statement:labeled-statement:
identifier : statementidentifier : statement

문 레이블은 goto 문에만 의미가 있으며 다른 모든 컨텍스트에서 레이블 문은 레이블에 관계없이 실행됩니다.A statement label is meaningful only to a goto statement; in any other context, a labeled statement is executed without regard to the label.

jump-statement는 동일한 함수에 있어야 하며 동일한 함수에서 하나의 문 앞에만 나타날 수 있습니다.A jump-statement must reside in the same function and can appear before only one statement in the same function. goto 이후에 오는 identifier 이름 집합은 해당 이름이 다른 식별자를 방해하지 않도록 자체 네임스페이스를 가지고 있습니다.The set of identifier names following a goto has its own name space so the names do not interfere with other identifiers. 레이블을 다시 선언할 수 없습니다.Labels cannot be redeclared. 자세한 내용은 네임스페이스를 참조하세요.See Name Spaces for more information.

가능하면 goto보다 break, continuereturn 문을 사용하는 것이 더 좋은 프로그래밍 방식입니다.It is good programming style to use the break, continue, and return statement in preference to goto whenever possible. break 문은 한 수준의 루프에서만 종료되므로 깊이 중첩된 루프 내에서 루프를 종료하려면 goto가 필요할 수도 있습니다.Since the break statement only exits from one level of the loop, a goto may be necessary for exiting a loop from within a deeply nested loop.

이 예제에서는 goto 문을 보여 줍니다.This example demonstrates the goto statement:

// goto.c  
#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 < 3; j++ )  
        {  
            printf_s( " Inner loop executing. j = %d\n", j );  
            if ( i == 5 )  
                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 );  
}  

이 예제에서 goto가 5에 해당하는 경우 stop 문은 i이라는 레이블이 지정된 지점으로 제어를 전송합니다.In this example, a goto statement transfers control to the point labeled stop when i equals 5.

참고 항목See Also

Statements