MFC의 예외 처리

이 문서에서는 MFC에서 사용할 수 있는 예외 처리 메커니즘을 설명합니다. 다음 두 가지 메커니즘을 사용할 수 있습니다.

  • MFC 버전 3.0 이상에서 사용할 수 있는 C++ 예외

  • MFC 버전 1.0 이상에서 사용할 수 있는 MFC 예외 매크로

MFC를 사용하여 새 애플리케이션을 작성하는 경우 C++ 메커니즘을 사용해야 합니다. 기존 애플리케이션에서 이미 해당 메커니즘을 광범위하게 사용하는 경우 매크로 기반 메커니즘을 사용할 수 있습니다.

MFC 예외 매크로 대신 C++ 예외를 사용하도록 기존 코드를 쉽게 변환할 수 있습니다. 코드 변환의 이점과 이에 대한 지침은 예외: MFC 예외 매크로에서 변환 문서에 설명되어 있습니다.

MFC 예외 매크로를 사용하여 애플리케이션을 이미 개발한 경우 새 코드에서 C++ 예외를 사용하는 동안 기존 코드에서 이러한 매크로를 계속 사용할 수 있습니다. 예외: 버전 3.0의 예외 매크로 변경 내용은 이에 대한 지침을 제공합니다.

참고 항목

코드에서 C++ 예외 처리를 사용하도록 설정하려면 프로젝트 속성 페이지 대화 상자의 C/C++ 폴더에 있는 코드 생성 페이지에서 C++ 예외 사용 또는 /EHsc 컴파일러 옵션을 사용합니다.

이 문서에서는 다음 항목을 다룹니다.

예외를 사용하는 경우

프로그램 실행 중에 함수가 호출되면 정상 실행, 잘못된 실행 또는 비정상적인 실행이라는 세 가지 범주의 결과가 발생할 수 있습니다. 각 범주는 아래에 설명되어 있습니다.

  • 일반 실행

    함수는 정상적으로 실행되고 반환할 수 있습니다. 일부 함수는 함수의 결과를 나타내는 결과 코드를 호출자에게 반환합니다. 가능한 결과 코드는 함수에 대해 엄격하게 정의되며 함수의 가능한 결과 범위를 나타냅니다. 결과 코드는 성공 또는 실패를 나타내거나 정상적인 예상 범위 내에 있는 특정 유형의 실패를 나타낼 수도 있습니다. 예를 들어 파일 상태 함수는 파일이 존재하지 않음을 나타내는 코드를 반환할 수 있습니다. 결과 코드는 많은 예상 결과 중 하나를 나타내므로 "오류 코드"라는 용어는 사용되지 않습니다.

  • 잘못된 실행

    호출자가 함수에 인수를 전달하는 실수를 하거나 부적절한 컨텍스트에서 함수를 호출합니다. 이 경우 오류가 발생하며 프로그램 개발 중에 어설션에 의해 검색되어야 합니다. (어설션에 대한 자세한 내용은 를 참조하세요 .C/C++ 어설션.)

  • 비정상적인 실행

    비정상적인 실행에는 메모리 부족 또는 I/O 오류와 같이 프로그램 제어 외부의 조건이 함수의 결과에 영향을 주는 상황이 포함됩니다. 예외를 catch하고 throw하여 비정상적인 상황을 처리해야 합니다.

예외를 사용하는 것은 비정상적인 실행에 특히 적합합니다.

MFC 예외 지원

C++ 예외를 직접 사용하든 MFC 예외 매크로를 사용하든 간에 프레임워크 또는 애플리케이션에서 throw될 수 있는 CException 클래스 또는 CException파생 개체를 사용합니다.

다음 표에서는 MFC에서 제공하는 미리 정의된 예외를 보여 줍니다.

Exception 클래스 의미
CMemoryException 클래스 메모리 부족
CFileException 클래스 파일 예외
CArchiveException 클래스 보관/Serialization 예외
CNotSupportedException 클래스 지원되지 않는 서비스에 대한 요청에 대한 응답
CResourceException 클래스 Windows 리소스 할당 예외
CDaoException 클래스 데이터베이스 예외(DAO 클래스)
CDBException 클래스 데이터베이스 예외(ODBC 클래스)
COleException 클래스 OLE 예외
COleDispatchException 클래스 디스패치(자동화) 예외
CUserException 클래스 사용자에게 메시지 상자를 경고한 다음 제네릭 CException 클래스를 throw하는 예외

버전 3.0 이상에서는 MFC가 C++ 예외를 사용했으나 형식에서 C++ 예외와 유사한 이전 예외 처리 매크로를 여전히 지원합니다. 이러한 매크로는 새 프로그래밍에는 권장되지 않지만 여전히 역 호환성에 대해 지원됩니다. 매크로를 이미 사용하는 프로그램에서 자유롭게 C++ 예외를 사용할 수 있습니다. 전처리 중에 매크로는 Visual C++ 버전 2.0을 기준으로 C++ 언어의 MSVC 구현에 정의된 예외 처리 키워드(keyword) 계산됩니다. C++ 예외를 사용하는 동안 기존 예외 매크로를 남겨둘 수 있습니다. 매크로와 C++ 예외 처리를 혼합하고 새 메커니즘 을 사용하도록 이전 코드를 변환하는 방법에 대한 자세한 내용은 예외: MFC 매크로 및 C++ 예외 및 예외사용: MFC 예외 매크로에서 변환 문서를 참조하세요. 이전 MFC 예외 매크로를 계속 사용하는 경우 C++ 예외 키워드로 평가합니다. 예외: 버전 3.0의 예외 매크로 변경 내용을 참조하세요. MFC는 구조적 예외 처리에 설명된 대로 Windows NT SEH(구조적 예외 처리기)를 직접 지원하지 않습니다.

예외에 대한 추가 읽기

다음 문서에서는 예외 전달을 위해 MFC 라이브러리를 사용하는 방법에 대해 설명합니다.

다음 문서에서는 MFC 예외 매크로를 C++ 예외 키워드(keyword) 비교하고 코드를 조정하는 방법을 설명합니다.

참고 항목

예외 및 오류 처리에 대한 최신 C++ 모범 사례