Documentation指出「使用_set_se_translator時必須使用/ EHa」。
我的問題是:應/ EHa用於項目中的所有文件/項目中的所有文件,以捕獲異常或僅在調用_set_se_translator的文件中?使用_set_se_translator和編譯標誌
1
A
回答
2
您不僅需要這些功能,還需要捕獲異常,還需要拋出並傳播它們的函數。實際調用_set_se_translator
本身可能不需要用/ Eha編譯,但爲什麼不一致?
2
檢查後,我必須不同意之前所說的關於需要用/ EHa編譯的所有實例。我做了一個小程序,以:
崩潰代碼
__declspec(dllexport) void crashMe() { *((int*)0)=0; }
在DLL中沒有任何異常在一個try/catch處理所有
- 調用代碼的其他地方編譯
然後
- 除非調用代碼與/ EHA編譯的程序會崩潰
- 沒有
_set_se_translator
例外只能在catch(...)
+0
感謝您的調查! OP可能處於相同的情況:將Boost.Test與已編譯的庫一起使用,並且我可以僅爲測試文件對象啓用/ EHa –
相關問題
- 1. 無論如何獲得編譯標誌文件中使用的編譯標誌?
- 2. CMake編譯標誌
- 3. 編譯時標誌
- 4. 使用編譯器標誌「-static-libgcc」
- 5. 使用C++編譯wxWidgets 0x標誌
- 6. 鐺 - 使用默認標誌編譯
- 7. 使用-msse編譯器標誌
- 8. g ++等效的編譯器標誌到VC++編譯器標誌
- 9. 如何使用CMake在編譯時定義編譯器標誌?
- 10. 在使用rbenv編譯ruby時如何傳遞編譯標誌?
- 11. __sync_bool_compare_and_swap編譯器標誌和包含
- 12. Ubuntu 17.04和-mx32編譯標誌multilib
- 13. 的Java -server標誌和編譯
- 14. C++鏈接和編譯標誌
- 15. 覆蓋GCC編譯標誌
- 16. Objective-C編譯器標誌
- 17. 編譯器標誌在Eclipse
- 18. C++編譯器標誌11
- 19. Cmake交叉編譯標誌
- 20. GCC編譯器標誌「-DEVAL」
- 21. Cmake更改編譯標誌
- 22. Cython OpenMP編譯器標誌
- 23. 如何使用Rcpp和內聯設置g ++編譯器標誌?
- 24. 用`-static`標誌編譯R包
- 25. -fPIC編譯標誌有什麼作用?
- 26. 用優化標誌編譯C
- 27. 使用gdb而無需使用「-g」標誌編譯
- 28. 如何在使用Visual Studio編譯時設置其他F#編譯器標誌?
- 29. 使GWT Maven插件在GWT編譯期間使用-XdisableUpdateCheck標誌
- 30. 如何在LabVIEW中編譯用於編譯標誌的不同目標的VI?
據我已經使用讀捕獲/ EHA涉及安全問題,這不是好的做法。並且可能會導致性能較差的圖像,因爲即使編譯器沒有看到投擲,編譯器也不會主動優化try塊。 – cprogrammer
安全問題?不要這樣想。沒有什麼好的表現,是的。你大量增加了可能導致C++異常拋出的指令數量。 – MSalters
你知道它效率低嗎?也許我應該使用SEH並自己轉換異常。 – cprogrammer