c++ - 我可以在 STL 中禁用异常吗?

标签 c++ visual-c++ stl exception-handling

我想禁用在 MSVC 下编译的 C++ 应用程序中的异常。我已将启用 C++ 异常选项切换为 NO,但我收到警告,告诉我使用选项/Ehsc,但我不想这样做。


我的代码中没有 try/catch block ,但我使用 STL。我发现使用宏定义 _HAS_EXCEPTIONS=0 应该禁用 STL 中的异常,但我仍然收到如下警告:


警告 C4275:非 dll 接口(interface)类“stdext::exception”用作 dll 接口(interface)类“std::bad_typeid”的基础 参见“stdext::exception”的声明 见'std::bad_typeid'的声明


有什么办法可以关闭异常是STL?

注意:在我的代码中,我也想关闭 RTTI 选项。无论 RTTI 是打开还是关闭,我都会收到相同的警告。

最佳答案

Microsoft STL 支持异常解除。

对于 MSVC STL,定义宏 _HAS_EXCEPTIONS=0 会在您将应用程序与 libcmt.lib/libcmtd.lib(/MT 或/MTd 编译器选项)链接时禁用异常。

如果您与 msvcrt.lib/msvcrtd.lib(/MD 或/MDd 编译器选项)链接,您需要再定义一个宏 - _STATIC_CPPLIB。在这种情况下,请在包含任何 STL 代码之前添加以下行:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

或将以下内容添加到编译器选项中:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

请注意,您需要在项目设置中禁用 C++ 异常。

关于c++ - 我可以在 STL 中禁用异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553103/

相关文章:

c++ - 为什么在 Visual Studio 中某些头文件需要链接库?

c++ - extern "C"、重载和函数指针可能存在歧义

c++ - Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap

c++ - Openmp 结果不可靠?

c++ - 在 STL 中使用返回索引进行二进制搜索?

c++ - gdb中的条件显示

c++ - 在 C++ 中的溢出链接中处理 fstream 文件

c++ - 无法编译 Microsoft COM/ActiveX 示例

c++ - opengl中如何使用子窗口

c++ - 使用 std::map const_iterator 更改/更新值