Visual Studio 예외처리 옵션
coder story/C/C++ 2009/03/24 16:47Visual 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 발생시 소멸자 호출은 정상적으로 되는군요.
이 글은 스프링노트에서 작성되었습니다.
'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 |

이올린에 북마크하기