обработка исключений — как узнать, был ли запущенный код Microsoft C ++ скомпилирован с ключом / EHa?

Мне нужно убедиться, что используемый заголовок скомпилирован с ключом компилятора / EHa?

Как я могу это сделать?

0

Решение

inline bool CodeHasEHaSwitch()
{
bool dtorCalled = false;

struct CCheckEHaSwitch
{
CCheckEHaSwitch( bool& dtorCalled) : dtorCalled( dtorCalled ) {}
~CCheckEHaSwitch() {  dtorCalled = true; }
bool& dtorCalled;

static void Win32ExceptionTranslator( unsigned int nExceptionCode,
EXCEPTION_POINTERS *pExceptionInfo )
{  throw nExceptionCode; }
};

_se_translator_function pfnPrevSeTranslator =
_set_se_translator( CCheckEHaSwitch::Win32ExceptionTranslator );
try
{
CCheckEHaSwitch test( dtorCalled );

*((int*)0) = 0;  // generate access violation
}
catch (unsigned int)
{
}

_set_se_translator( pfnPrevSeTranslator );

return dtorCalled;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]