다음을 통해 공유


try-finally 문

Microsoft 전용

다음 구문에 설명의 try-finally 문을:

__try {
   // guarded code
}
__finally {
   // termination code
}

문법

  • try-finally-문의:
    __try 복합 문

    __finally 복합 문

try-finally 문을 코드 블록의 실행이 중단 되는 경우 정리 코드를 실행 하려면 대상 응용 프로그램이 Microsoft 확장을 C 및 C++ 언어입니다.정리의 메모리 할당 해제, 파일을 닫고 파일 핸들을 해제 하는 등의 작업으로 구성 됩니다.try-finally 여러 위치 어디 한 일으킬 수 오류에 대 한 완전 한 루틴을 루틴에서 반환에 대 한 문을 특히 유용할 수 있습니다.

관련된 정보 및 코드 예제를 참조 하십시오. 시도-문을 제외 하 고.일반적으로 처리 하는 구조화 된 예외에 대 한 자세한 내용은 구조적 예외 처리.관리 되는 응용 프로그램에서에서 예외 처리에 대 한 자세한 내용은 에서 예외 처리.

[!참고]

구조적된 예외를 C와 C++ 소스 파일에 대 한 w i n 32 사용을 처리 합니다.그러나이 특히 C++에 대 한 설계 되지 않았습니다.C + + 예외 처리를 사용 하 여 코드를 이식 수를 확인할 수 있습니다.또한 모든 형식의 예외를 처리할 수 있다는 점에서 C++ 예외 처리 보다 유연한입니다.C + + 프로그램에서 C++ 예외 처리 메커니즘을 사용 하는 것이 좋습니다 (try, catch 및 throw 문).

복합 문이 뒤에 __try 절 보호 구역입니다.복합 문이 뒤에 __finally 절 종료 처리기입니다.처리기를 보호 구역 여부 보호 구역 예외 (비정상적인 종료) 또는 표준 (정상 종료) 이동 종료에 관계 없이 종료 될 때 실행 하는 작업 집합을 지정 합니다.

충전 제어는 __try 문에서 간단한 순차 실행 (이동) 합니다.컨트롤에 입력할 때의 __try, 연결 된 처리기가 활성화 됩니다.제어 흐름을 try 블록의 끝에 도달 하면 실행은 다음과 같이 진행 됩니다.

  1. 종료 처리기가 호출 됩니다.

  2. 종료 처리기가 완료 되 면 계속 실행 한 후에 __finally 문입니다.섹션 끝에 방법에 관계 없이 보호 (예를 들어,을 통해는 goto 보호 된 본문의 나는 return 문), 종료 처리기가 실행 됩니다 before 보호 된 섹션의 제어 흐름 이동.

    A __finally 문을 차단에 대 한 적절 한 예외 처리기를 검색 합니다.

예외가 발생 하는 경우는 __try 블록을 운영 체제에 대 한 예외 처리기를 찾아야 합니다 또는 프로그램이 실패 합니다.처리기에서 모든이 없으면 __finally 블록 실행 및 처리기의 실행을 다시 시작 합니다.

예를 들어, 일련의 함수 호출 링크 함수 A D를 작동 하는 다음 그림에 나와 있는 것 처럼 가정 합니다.각 함수의 종료 처리기를입니다.시스템의 스택 해제에 따라 종료 처리기 예외 D 함수에서 발생 A를 처리할 경우이 순서 대로 호출 됩니다: D, C, B.

종료 처리기 실행 순서

처리기 실행 순서 종료

[!참고]

Try-finally의 동작을 사용할 수 몇 가지 다른 언어의 차이 마지막, C# 등입니다.단일 __try 을 모두 하지만,의 있을 수 있습니다 __finally 및 __except.모두 함께 사용 하는 경우는 외부 try-문 안쪽 try-finally 문을 포함 해야 하는 점을 제외 하 고.또한 각 블록을 실행할 때를 지정 하는 규칙은 서로 다릅니다.

__Leave 키워드

__leave 키워드의 보호 구역 내 에서만 사용할 수 있는 try-finally 문과 그 효과 보호 된 섹션의 끝으로 이동 합니다.에 종료 처리기의 첫 번째 문에서 실행이 계속 됩니다.

A goto 문을 부족의 보호 구역에서 점프할 수도 있지만 스택 해제를 호출 하기 때문에 성능이 저하 됩니다.__leave 스택 해제 되지 않습니다 때문에 문에 더 효율적입니다.

비정상적인 종료

종료는 try-finally 문을 사용 하는 longjmp 함수 실행 시간 비정상적인 종료 것으로 간주 합니다.로 이동할 수 없습니다는 __try 문, 하지만 법 중 하나를 이동할 수 있습니다.모든 __finally 출발 지점 간의 활성 문을 (의 정상적인 종료는 __try 블록) 및 대상 (는 __except 예외 처리 블록) 실행 해야 합니다.이 로컬 해제를 라고 합니다.

경우는 시도 블록 블록 밖으로 점프를 비롯 하 여 어떤 이유로 종료 됩니다 중간에, 연결 된 시스템을 실행 마지막 스택 해제를 차단 하는 프로세스의 일부로.이러한 경우에는 AbnormalTermination 함수 내에서 호출 하는 경우 TRUE를 반환의 마지막 차단. 그렇지 않은 경우 FALSE를 반환 합니다.

프로세스가 실행 중간에 종료 될 경우 종료 처리기가 호출 되는 try-finally 문입니다.

Microsoft 특정 끝

참고 항목

참조

종료 처리기를 작성합니다.

구조적된 예외 처리 (C++)

C + + 키워드

Termination-Handler Syntax