[英]How to turn off exceptions in Microsoft compiler(cl)?
我使用什么編譯器標志來完全擺脫異常處理? 我根本不使用它們,但編譯器仍然生成 .pdata 和 .xdata 部分,它們僅用於異常處理。
在您的項目屬性中,將Enable C++ Exceptions 設置為No :
要設置命令行這個選項,你就離開了/EHa
, /EHsc
和/EHs
從標志[option]
中所描述的部分編譯器命令行語法手冊。 進一步相關的 MSDN 閱讀:
這是我的經驗。 和練習。
要使用 cl.exe 禁用 C++ 異常,應執行以下所有操作:
這種組合使try/throw/catch
成為不存在的關鍵字。 也就是說:您處於非標准 C++ 領域。
cl.exe
編譯器始終生成支持異步結構化異常處理 ( SEH ) 的代碼
這意味着 C 或 C++,SEH“總是在那里”。 我個人確實使用它。 MS STL 編譯並且使用上述開關組合速度非常快。 在(幾乎所有我的) main()
我捕獲了潛在的 SE 引發,然后我創建了一個小型轉儲,Visual Studio 可以打開它並引導您到代碼中引發異常的確切位置。
我們需要談談/kernel
開關。 它一次性關閉 C++ 異常,並指示鏈接器生成“內核模式”win 可執行文件、驅動程序等。 /GR-
仍然需要手動使用。 我將它用於標准桌面/控制台應用程序,沒有任何問題。 當然總是使用 SEH。
注意: _CPPUNWIND
你不能設置。 但是您確實在代碼中使用它來檢查 C++ 異常是打開還是關閉。
HTH
PS:我總是使用靜態運行時庫:開關/MT
和/MTd
。 我認為這些天人們不需要做任何其他事情,以防使用 dll 運行時,開關: /MD
和/MDd
。 我不是 100% 確定,請檢查例如這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.