5.2.7. C++ 예외 처리

C++ 예외 처리는 RVCT에서 완전 지원됩니다. 하지만 컴파일러는 C++ 예외 처리를 기본적으로 지원하지 않습니다. --exceptions 옵션을 사용하여 C++ 예외 처리를 활성화해야 합니다. 자세한 내용은 --[no_]exceptions를 참조하십시오.

Note

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

예외 테이블 생성을 제한적으로 제어할 수 있습니다.

런타임 시 함수 해제

기본적으로 --exceptions를 사용하여 컴파일된 함수는 런타임에 해제될 수 있습니다. 자세한 내용은 --[no_]exceptions를 참조하십시오. 함수 해제에는 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 © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential