다음을 통해 공유


try-finally 문(C)

Microsoft 전용

try-finally 문은 코드 블록의 실행이 중단된 경우 애플리케이션이 정리 코드 실행을 보장할 수 있도록 하는 C 언어에 대한 Microsoft 확장입니다. 정리는 메모리 할당 취소, 파일 닫기 및 파일 핸들 해제와 같은 작업으로 구성됩니다. 이 try-finally 문은 루틴에서 조기 반환을 일으킬 수 있는 오류에 대한 검사가 이루어지는 여러 위치가 있는 루틴에 특히 유용합니다.

try-finally-statement:
__try compound-statement __finally compound-statement

절 뒤의 __try 복합 문은 보호된 섹션입니다. 절 뒤의 __finally 복합 문은 종료 처리기입니다. 처리기는 보호된 섹션이 종료될 때 실행되는 작업 집합을 지정합니다. 보호된 섹션이 예외(비정상적인 종료)에 의해 종료되는지 또는 표준 가을(일반 종료)에 의해 종료되는지 여부는 중요하지 않습니다.

컨트롤은 __try 간단한 순차적 실행(fall through)을 통해 문에 도달합니다. 컨트롤이 __try 문을 입력하면 연결된 처리기가 활성화됩니다. 실행은 다음과 같이 진행됩니다.

  1. 보호된 섹션이 실행됩니다.

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

  3. 종료 처리기가 완료되면 문 이후에 실행이 __finally 계속됩니다. 보호된 섹션이 종료되는 방식(예: 보호된 본문의 문을 통해 또는 문을 통해 gotoreturn )에 관계없이 제어 흐름이 보호된 섹션 밖으로 이동하기 전에 종료 처리기가 실행됩니다.

__leave 키워드는 문 블록 내에서 try-finally 유효합니다. 그 효과는 __leave 블록의 끝으로 이동하는 것입니다 try-finally . 종료 처리기가 즉시 실행됩니다. 문은 goto 동일한 결과를 수행하는 데 사용할 수 있지만 문은 goto 스택 해제를 발생합니다. 이 문은 __leave 스택 해제를 포함하지 않으므로 더 효율적입니다.

문 또는 longjmp 런타임 함수를 return 사용하여 문을 종료하는 try-finally 것은 비정상적인 종료로 간주됩니다. 성명서에 __try 뛰어 들어가는 것은 합법적이지 않지만 한 명에서 뛰어 나오는 것은 합법적입니다. 출발 지점과 대상 사이에 활성 상태인 모든 __finally 문을 실행해야 합니다. 이를 로컬 해제라고 합니다.

문을 실행하는 try-finally 동안 프로세스가 종료되면 종료 처리기가 호출되지 않습니다.

비고

구조적 예외 처리는 C 및 C++ 원본 파일에서 작동합니다. 그러나 C++용으로 특별히 설계되지는 않았습니다. 이식 가능한 C++ 프로그램의 경우 구조적 예외 처리 대신 C++ 예외 처리를 사용해야 합니다. 또한 C++ 예외 처리 메커니즘은 모든 형식의 예외를 처리할 수 있으므로 훨씬 더 유연합니다. 자세한 내용은 C++ 언어 참조예외 처리를 참조하세요.

문의 작동 방식을 확인하려면 문의 예제try-excepttry-finally 참조하세요.

END Microsoft 관련

참고하십시오

try-finally 문(C++)