2012-08-13 6 views
-1

내함수가 내 프로그램에서 (예 : RaiseException) SEH 예외를 발생시키는 유일한 함수이고 C++ 예외로 변환하려는 경우 "나를 선택적으로 사용"할 수있는 방법이 있습니까? /EHa 함수를 사용하면 예외가 블로 팅되지 않고 CStructured_Exception으로 변환되거나 프로그램의 나머지 부분이 normally caused by /EHa으로 느려 집니까?특정 기능에 대해/EHsc를 사용하여/EHa의 이점을 얻는 방법?

+0

아니요, 전화 사이트에서 활성화되어 있어야합니다. 이 두 가지 CPU 명령어가 실제로 코드를 느리게한다는 증거를 제공하십시오. 오래 전에 제거되었습니다. 지금 "혐오, 진흙을 빨아 먹는다"는 장점이없는 낚시 원정이다. –

+0

@HansPassant : 마이크로 소프트 * 자체는 컴파일러가 "try"블록을 적극적으로 최적화하지 않기 때문에 "/ EHa"는 성능이 떨어지는 이미지가 될 수 있다고 (VS 2012 문서에서도) 말한다. '던짐 '을 보지 마라 *, 나는 그들이 그것을 말할 때 실수를하지 않는다고 생각한다. 코드 팽창 (* 언급하지 않음)에 관해서는, 그것은 사실입니다 : 내 실행 파일은'/ EHa '로 ~ 10-20 % 더 커집니다. 나는 그것을 결코 "싫어"라고 말하지 않았다. (적어도'/ EHa'는 가능하다.) 나는 사용하지 않는 것을 위해 내 실행 파일을 부 풀릴 필요가 없다. – Mehrdad

답변

1

분명히 컴파일러 옵션이 없습니다. 아마도 :

void RaiseException() { 
    __try { 
     // do something that might throw here... 
    } 

    __except(EXCEPTION_EXECUTE_HANDLER) { 
     throw std::exception("structured exception"); 
    } 
} 
+0

나는 * 래퍼 함수를 ​​만들 수 *하지만 가지 이상한 던져 캐치하고 바로 내가 CStructured_Exception''로 공급하는'EXCEPTION_POINTERS' 구조를 얻을 수있는, 다시 던져 느낀다. 그럼에도 불구하고 내가 생각하는 올바른 대안은 ... +1 – Mehrdad