3.5.12. C++ 예외 처리

C++ 예외 처리는 RVCT에서 완전 지원됩니다. 하지만 컴파일러는 C++ 예외 처리를 기본적으로 지원하지 않습니다. --exceptions 옵션을 사용하여 C++ 예외 처리를 활성화해야 합니다(C++ 언어 구성 및 오브젝트 생성 참조).

Note

Rogue Wave Standard C++ Library는 C++ 예외가 활성화된 상태로 제공됩니다.

예외 테이블 생성을 제한적으로 제어할 수 있습니다(실행 시 함수 해제 참조).

실행 시 함수 해제

기본적으로 --exceptions를 사용하여 컴파일된 함수는 런타임에 해제될 수 있습니다(C++ 언어 구성 및 오브젝트 생성 참조). 함수 해제에는 C++ 자동 변수의 소멸과 스택 프레임에 저장된 레지스터 값의 복원이 포함됩니다. 함수 해제는 수행할 작업을 설명하는 예외 테이블을 생성하여 구현됩니다.

pragma #pragma exceptions_unwind#pragma no_exceptions_unwind를 사용하여 특정 함수에 대한 해제를 활성화 또는 비활성화할 수 있습니다(코드 생성을 제어하는 pragma 참조). --exceptions_unwind 옵션은 이 pragma의 초기값을 설정합니다.

어떤 함수에 대해 함수 해제를 비활성화하면 다음과 같은 효과가 발생합니다.

  • 예외는 런타임에 해당 함수를 통해 발생될 수 없으며 예외 발생에 대해 스택 해제도 발생하지 않습니다. 해당 언어가 C++일 경우 std::terminate가 호출됩니다.

  • 매우 간결한 예외 테이블 표현을 사용하여 이 함수를 설명할 수 있으며, 이 표현은 테이블 최적화를 통해 스마트 링커를 보조합니다.

  • 호출자와 호출 수신자가 올바르게 상호 작용해야 하므로 함수 인라이닝은 제한됩니다.

따라서 #pragma no_exceptions_unwind를 사용하여 추가 소스 장식이 필요 없는 방식으로 해제를 강제로 방지할 수 있습니다.

반대로, C++에서 빈 함수 예외 사양은 보호되는 함수까지 해제를 허용한 다음, ISO C++ 표준에 따라 std::unexpected()를 호출합니다.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0205GK
Non-Confidential