다음을 통해 공유


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

Windows 95, Windows 98 및 Windows 2000 (이전의 Windows NT) 라는 운영 체제를 협조 하는 것 이지만 프로그래밍 언어에서 직접적으로 지원도 구조적된 예외 처리 예외를 처리 하는 강력한 방법을 지원 합니다.

문법

문을 제외한 try :

__try 복합 문

__except( ) 복합 문

설명

예외가 예상 하지 않거나 정상적으로 진행 하는 프로세스의 기능을 방해 하는 이벤트입니다.하드웨어와 소프트웨어 예외를 검색할 수 있습니다.하드웨어 예외 나누기 0으로 하 고, 숫자 형식의 오버플로 포함 합니다.소프트웨어 예외를 감지 하 고 신호 시스템을 호출 하 여 발생할 수 있는 RaiseException 함수 및 Windows에서 검색 하는 특수 한 상황입니다.

구조적된 예외 처리를 보다 안정적인 코드를 작성할 수 있습니다.예기치 않은 종료 시 메모리 블록, 파일 등의 리소스 제대로 닫혀 있는지 확인할 수 있습니다.에 의존 하지 않는 간결 하 게 구조화 된 코드가 메모리 부족과 같은 특정 문제를 처리할 수도 있습니다 goto 문이나 반환 코드의 상세한 테스트 합니다.

시도 하십시오-를 제외 하 고try-finally 문은 응용 프로그램이 실행을 정상적으로 종료 됩니다 이벤트 이후에 프로그램을 제어할 수 있게 하는 C 언어의 Microsoft 확장입니다.

[!참고]

구조적된 예외 처리는 C 및 C++ 소스 파일에서 작동합니다.그러나이 특히 C++에 대 한 설계 되지 않았습니다.구조적된 예외 처리는 C++ 프로그램에서 사용 하는 경우 로컬 개체에 대 한 소멸자가 호출 되지 않지만 (사용 하는 경우 /EHsc), C++ 예외 처리를 사용 하 여 코드를 이식 수 있게 됩니다.해당 C++ 예외 처리 모든 유형의 예외를 처리할 수 있는 메커니즘 보다 유연한입니다.

구조적된 예외 처리 메커니즘을 두 가지 있습니다.

두 가지 유형의 처리기 구분 하면서도 "스택 해제" 이라는 프로세스를 통해 밀접 하 게 관련 된 예외가 발생할 때 Windows에서 현재 활성화 되어 있는 가장 최근에 설치 된 예외 처리기를 찾습니다.처리기는 다음 중 하나를 수행할 수 있습니다.

  • 컨트롤에는 다른 처리기가 (예외를 인식 합니다 실패) 전달.

  • 인식 되지만 예외를 없앱니다.

  • 인식 하 고 해당 예외를 처리 합니다.

예외가 발생 했을 때 실행 중인 함수에 예외 처리기에 예외를 인식 수 있습니다.경우에 따라 함수 스택에서 훨씬 더 클 수 있습니다.현재 실행 중인 함수 뿐만 아니라 모든 함수의 스택 프레임에 종료 됩니다.이 과정에서 스택 "해제" 됩니다:가 아닌 경우 지역 변수는 함수, 종료 정적, 스택에서 제거 됩니다.

스택 해제 운영 체제 각 함수에 대해 작성 한 모든 종료 처리기가 호출 됩니다.종료 처리기를 사용 하면 비정상적인 종료로 인해 열려 유지 하는 리소스를 정리할 수 있습니다.중요 섹션을 입력 한 경우 종료 처리기를 끝낼 수 있습니다.프로그램이 종료 될 경우 닫기 및 임시 파일을 제거 하는 것과 같은 기타 관리 작업을 수행할 수 있습니다.

구조적된 예외 처리를 사용 하는 C 모듈을 설치한 경우 C++ 예외 처리를 사용 하는 C++ 모듈을 혼합할 수 있습니다.참조 하십시오 예외 처리 차이점.

자세한 내용은 다음을 참조하십시오.

참고 항목

참조

Visual C++에서는 처리 된 예외

C + + 키워드