我使用什么编译器标志来完全摆脱异常处理? 我根本不使用它们,但编译器仍然生成.pdata和.xdata部分,仅用于异常处理。
答案 0 :(得分:6)
要在命令行中设置此选项,您将忽略/EHa
部分中的/EHsc
,/EHs
和[option]
标记,如Compiler Command-Line Syntax中所述手册。
进一步相关的MSDN阅读:
答案 1 :(得分:0)
这是我的经验。并练习。
要使用 cl.exe 禁用 C++ 异常,应执行以下所有操作:
这种组合使 try/throw/catch
成为不存在的关键字。也就是说:您处于非标准 C++ 领域。
cl.exe
编译器总是生成支持异步结构化异常处理 (SEH) 的代码
这意味着 C 或 C++,SEH“永远存在”。我个人确实使用它。 MS STL 编译并且使用上述开关组合速度非常快。在(几乎所有我的)main()
中,我捕捉到潜在的 SE 引发,然后我 create a minidump Visual Studio 可以打开并引导您到代码中引发异常的确切位置。
我们需要谈谈 /kernel
开关。它一次性关闭 C++ 异常,并指示链接器生成“内核模式”win 可执行文件、驱动程序等。 /GR-
仍然需要手动使用。我将它用于标准桌面/控制台应用程序,没有任何问题。当然总是使用 SEH。
注意:_CPPUNWIND
不能设置。但是您确实在代码中使用它来检查 C++ 异常是打开还是关闭。
HTH
PS:我总是使用静态运行时库:开关 /MT
和 /MTd
。我认为现在人们不需要做任何其他事情,以防使用 dll 运行时,开关:/MD
和 /MDd
。我不是 100% 确定,请检查例如here。