簡體   English   中英

如何關閉 Microsoft 編譯器(cl)中的異常?

[英]How to turn off exceptions in Microsoft compiler(cl)?

我使用什么編譯器標志來完全擺脫異常處理? 我根本不使用它們,但編譯器仍然生成 .pdata 和 .xdata 部分,它們僅用於異常處理。

在您的項目屬性中,將Enable C++ Exceptions 設置No 禁用 C++ 異常

並通過指定/EHsc標志啟用展開語義: 展開語義

要設置命令行這個選項,你就離開了/EHa/EHsc/EHs從標志[option]中所描述的部分編譯器命令行語法手冊。 進一步相關的 MSDN 閱讀:

這是我的經驗。 和練習。

要使用 cl.exe 禁用 C++ 異常,應執行以下所有操作:

  • /EHsc 或任何其他/EH 組合,不應作為開關存在,
  • 必須使用 /D_HAS_EXCEPTIONS=0
  • /GR-禁用 RTTI

這種組合使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM