2017-07-29 65 views
0

我需要確保我正在使用的頭與/ EHa編譯器開關編譯?如何判斷我正在運行的Microsoft C++代碼是使用/ EHa開關編譯的?

我該怎麼做?

+0

header - > library? – user4581301

+0

header in,這是一個獨立的類,可以通過簡單地包含頭,僅包含頭,就像STL一樣使用。我正在假設異常處理。我想驗證這些假設,並警告包含標題的用戶,如果他們沒有正確編譯它。 – zumalifeguard

+0

啊哈!我得到你。我讀你的問題的方式是使用標題,而不是提供它。 – user4581301

回答

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; 
} 
相關問題