try-finally 문 (C)try-finally Statement (C)

Microsoft 전용Microsoft Specific

try-finally 문은 코드 블록 실행이 중단될 때 응용 프로그램에서 정리 코드가 실행되도록 보장하는 C 언어에 대한 Microsoft 확장입니다.The try-finally statement is a Microsoft extension to the C language that enables applications to guarantee execution of cleanup code when execution of a block of code is interrupted. 정리는 메모리 할당 해제, 파일 닫기 및 파일 핸들 해제와 같은 작업으로 구성됩니다.Cleanup consists of such tasks as deallocating memory, closing files, and releasing file handles. try-finally 문은 루틴으로부터 중간에 반환되게 만들 수 있는 오류가 있는지 확인하기 위해 검사가 수행되는 위치가 많은 루틴에 특히 유용합니다.The try-finally statement is especially useful for routines that have several places where a check is made for an error that could cause premature return from the routine.

try-finally-statement:try-finally-statement:
__try compound-statement__try compound-statement

__finally compound-statement__finally compound-statement

__try 절 뒤의 복합 문은 보호된 섹션입니다.The compound statement after the __try clause is the guarded section. __finally 절 뒤의 복합 문은 종료 처리기입니다.The compound statement after the __finally clause is the termination handler. 처리기는 보호된 섹션이 예외(비정상적 종료)로 인해 종료되었는지, 아니면 표준 제어 이동(정상적 종료)으로 인해 종료되었는지에 관계없이 가드되는 섹션이 종료될 때 실행되는 작업 집합을 지정합니다.The handler specifies a set of actions that execute when the guarded section is exited, whether the guarded section is exited by an exception (abnormal termination) or by standard fall through (normal termination).

제어는 단순한 순차적 실행(제어 이동)에 의해 __try 문에 도달합니다.Control reaches a __try statement by simple sequential execution (fall through). 제어가 __try 문에 들어가면 연결된 처리기가 활성화됩니다.When control enters the __try statement, its associated handler becomes active. 다음과 같이 실행됩니다.Execution proceeds as follows:

  1. 보호된 섹션이 실행됩니다.The guarded section is executed.

  2. 종료 처리기가 호출됩니다.The termination handler is invoked.

  3. 종료 처리기가 완료되면 실행이 __finally 문 후에 계속됩니다.When the termination handler completes, execution continues after the __finally statement. 보호된 섹션이 끝나는 방법(예: 보호된 본문 밖의 goto 문 또는 return 문을 통해)에 관계없이 제어 흐름이 보호된 섹션 밖으로 이동하기 전에 종료 처리기가 실행됩니다.Regardless of how the guarded section ends (for example, via a goto statement out of the guarded body or via a return statement), the termination handler is executed before the flow of control moves out of the guarded section.

    __leave 키워드는 try-finally 문 블록 내에서 유효합니다.The __leave keyword is valid within a try-finally statement block. __leavetry-finally 블록의 끝으로 이동하는 효과가 있습니다.The effect of __leave is to jump to the end of the try-finally block. 종료 처리기는 즉시 실행됩니다.The termination handler is immediately executed. goto 문을 사용하여 동일한 결과를 얻을 수 있지만 goto 문은 스택 해제를 초래합니다.Although a goto statement can be used to accomplish the same result, a goto statement causes stack unwinding. __leave 문은 스택 해제를 초래하지 않으므로 더 효율적입니다.The __leave statement is more efficient because it does not involve stack unwinding.

    try-finally 문 또는 return 런타임 함수를 사용하여 longjmp 문을 종료하는 것은 비정상적 종료로 간주됩니다.Exiting a try-finally statement using a return statement or the longjmp run-time function is considered abnormal termination. __try 문 안으로 이동할 수 없지만 이 문 밖으로 이동할 수는 있습니다.It is illegal to jump into a __try statement, but legal to jump out of one. 출발 지점과 도착 지점 간에 활성화된 모든 __finally 문이 실행되어야 합니다.All __finally statements that are active between the point of departure and the destination must be run. 이것을 "로컬 해제"라고 합니다.This is called a "local unwind."

    try-finally 문을 실행하는 동안 프로세스가 종료될 경우에는 종료 처리기가 호출되지 않습니다.The termination handler is not called if a process is killed while executing a try-finally statement.

참고

구조적 예외 처리는 C 및 C++ 소스 파일에서 작동합니다.Structured exception handling works with C and C++ source files. 특별히 C++용으로 설계되지는 않았습니다.However, it is not specifically designed for C++. C++ 예외 처리를 사용하여 코드의 이식성이 향상되는지 확인할 수 있습니다.You can ensure that your code is more portable by using C++ exception handling. 또한 C++ 예외 처리 메커니즘은 모든 형식의 예외를 처리할 수 있다는 점에서 훨씬 유연합니다.Also, the C++ exception handling mechanism is much more flexible, in that it can handle exceptions of any type.

참고

C++ 프로그램의 경우 구조적 예외 처리 대신 C++ 예외 처리를 사용해야 합니다.For C++ programs, C++ exception handling should be used instead of structured exception handling. 자세한 내용은 C++ 언어 참조예외 처리를 참조하세요.For more information, see Exception Handling in the C++ Language Reference.

try-finally 문이 작동하는 방법을 보려면 try-except 문의 예제를 참조하세요.See the example for the try-except statement to see how the try-finally statement works.

Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

try-finally 문try-finally Statement