当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我可以在STL中禁用异常吗?》经验,为你挑选了3个好方法。

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


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


warning C4275: non dll-interface class 'stdext::exception' used as base for dll-interface class 'std::bad_typeid' see declaration of 'stdext::exception' see declaration of 'std::bad_typeid'


有没有办法如何关闭例外是STL?

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



1> Rom098..:

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++异常.



2> Edouard A...:

您需要使用支持异常停用的STL.这通常是编译时宏定义.

除非我弄错了,否则STLPort会提供_STLP_USE_EXCEPTIONS = 0和_STLP_NO_EXCEPTIONS.我不知道程序如何使用这些设置.;)

我认为MS STL中也有一些隐藏的标志.

EASTL开箱即用,禁用例外:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html



3> 小智..:

类型id与运行时类型标识有关.您可能还想尝试关闭RTTI.

但是,指定C++标准库的某些部分会抛出异常.如果你禁用它们,你就会进入"未定义行为"的阴暗水域.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有