如果我知道我的程序中的某個特定的extern "C"
函數(比如RaiseException
)是引發SEH異常的唯一函數,並且我希望它們轉換爲C++異常,那麼是否有任何方法可以爲此選擇性地啓用/EHa
函數,以便將例外轉換爲CStructured_Exception
而不會膨脹,或者將其餘的程序放慢爲normally caused by /EHa
?如何通過/ EHsc獲得/ EHa對特定功能的好處?
-1
A
回答
1
顯然沒有編譯器選項來做到這一點。也許:
void RaiseException() {
__try {
// do something that might throw here...
}
__except(EXCEPTION_EXECUTE_HANDLER) {
throw std::exception("structured exception");
}
}
+0
我*可以*做一個包裝函數,但是它感覺有點奇怪,拋出,捕獲然後再拋出,這樣我就可以得到一個'EXCEPTION_POINTERS'結構來提供給'CStructured_Exception'。不過,這是一個有效的選擇,我猜... +1 – Mehrdad 2012-08-14 00:17:39
相關問題
- 1. 如果同時指定了EHsc和EHa,會發生什麼
- 2. 我可以通過/ EHsc獲得「__try」條款嗎?
- 3. Android如何獲得特定的偏好?
- 4. Visual C++非託管代碼:對於C++異常,使用/ EHa還是/ EHsc?
- 5. LOG4J通話只對特定的功能
- 6. 獲得通過功能PARAM數組
- 7. 如何獲得變量通過功能的JavaScript/jQuery的
- 8. 如何通過JavaScript獲得特價?
- 9. 如何通過特定的.on選擇器到功能
- 10. 我如何獲得通過特定的用戶和特定的主題標籤
- 11. 如何通過類對象angularjs功能
- 12. 如何通過的功能
- 13. 如何獲得280slides.com功能?
- 14. 如何獲得通過API
- 15. 如何通過預處理器定義獲得函數簽名?
- 16. 如何獲得通過setsid
- 17. 如何獲得通過SED,正則表達式或shell技能特定字符
- 18. 如何通過日期獲得匯率?
- 19. 如何通過jquery.each功能
- 20. 如何通過功能
- 21. 如何獲得通過
- 22. 如何針對特定標籤通過特定的CSS文件
- 23. 獲得一個ID功能的對象
- 24. 如何獲得特定值
- 25. 如何獲得通過JDBC
- 26. 如何獲得通過HTTP
- 27. 通過Spring Cache抽象獲得更好的性能
- 28. 如何通過批處理文件獲得特殊的目錄列表?
- 29. 如何通過畫布獲得更好的Html 5視頻性能?
- 30. 我們如何獲得特定動態添加TD的ID jQuery中的功能
不,它需要在呼叫站點處於活動狀態。提供證據證明這兩個cpu指令*真的會減慢你的代碼速度。早就消除了。現在的「omigod,這是糟糕的泥」是一個沒有優點的釣魚探險隊。 – 2012-08-14 00:05:29
@HansPassant:Microsoft *自己說(甚至在VS 2012文檔中)*「'/ EHa」可能會導致性能降低,因爲編譯器不會像積極地優化'try'塊,即使編譯器沒有看到「拋出」*,我不認爲他們在說這個時犯了錯誤(請隨時糾正我)。至於代碼膨脹(這是*沒有提到),這是真實的:我的可執行文件用'/ EHa'獲得大約10-20%的大。我從來沒有說過它「吮吸」(哎呀,至少'/ EHa'可用),我只是覺得沒有必要爲我不使用的東西膨脹我的可執行文件。 – Mehrdad 2012-08-14 00:14:11