Visual Studio 예외처리 옵션

coder story/C/C++ 2009/03/24 16:47

 Visual Studio 2005 이상 버전에서 프로젝트 옵션에 존재하는 예외처리 옵션은

  • a
    • 비동기 예외(SEH) 및 동기예외(C++)를 catch 하는 예외모델
  • s
    • C++ 예외만 catch하고 컴파일러가 extern C 함수에서 예외를 throw하는 것으로 가정하도록 하는 예외 처리 모델
  • c
    • s 와 함께 사용하면 C++ 예외만 catch되며 컴파일러는 extern C 함수에서 C++ 예외를 throw 하지 않는 것으로 가정. (a와 같이 사용가능하나 ca나 a 나 동일)

 

두 모델의 가장 큰 차이점은 /EHs(프로젝트 기본설정값) 이는 catch절에서 비동기 예외를 catch하지 않으며, VS2005 이상 에서 비동기 예외가 발생할 때 범위에 존재하는 개체는 비동기 예외를 처리해도 소멸되지 않는다. (/EHs 혹은 /EHsc 인 경우 SEH 를 처리 해도 해당 블럭안의 지역객체에 대해서 소멸자가 호출되지 않는다.)

 

실제 테스트를 해보니 정말로 지역객체에 대해 소멸자가 호출이 되지 않았습니다. (/EHa 를 사용하면 소멸자 호출이 보장되지만 이미지의 성능 하락이 있을 수 있다고 합니다.)

  

 

덧) VS2003 은 /EHsc 만을 지원하지만 SEH 발생시 소멸자 호출은 정상적으로 되는군요.

이 글은 스프링노트에서 작성되었습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License

'coder story > C/C++' 카테고리의 다른 글

Visual Studio 예외처리 옵션  (0) 2009/03/24
Safe Libraries: Standard C++ Library (VS 2005 이상 지원)  (0) 2009/02/06
Header Annotations  (0) 2009/01/29
SAL(Standard Annotation Language)  (2) 2009/01/29
_beginthread 의 또다른 문제  (0) 2008/11/03
shared_ptr 과 weak_ptr  (0) 2008/09/18
Trackback 0 : Comment 0
◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [100] : NEXT ▶