【发布时间】:2010-11-13 20:43:04
【问题描述】:
我正在尝试在 Visual Studio 2010 中完全禁用异常,并确保禁用异常处理,我进行了以下测试:
class CompilerFlagsTestExceptionConstructor
{
public:
CompilerFlagsTestExceptionConstructor() { throw std::exception("Exceptions Enabled"); }
~CompilerFlagsTestExceptionConstructor() { }
};
class CompilerFlagsTests : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE( CompilerFlagsTests );
CPPUNIT_TEST( Test_NoExceptions );
CPPUNIT_TEST_SUITE_END();
public:
void Test_NoExceptions()
{
try
{
CompilerFlagsTestExceptionConstructor object;
}
catch(std::exception)
{
assert(!"Exceptions are enabled");
}
}
};
我已在属性页中检查了异常处理已禁用,并且我还在我的所有项目中禁用了 RTTI。我尝试将 /EH 设置为负数,并从命令行中省略它。
每次我运行此测试时,它都会失败并正确抛出异常
我想禁用异常处理的原因是因为目标软件是为不支持异常处理的目标架构编写的,并且会导致大量代码膨胀以适应堆栈展开。目标架构还具有可执行文件的最大大小,因此禁用异常会缩小代码并具有性能优势。我想在 windows 版本上禁用异常处理,以确保对目标的错误处理正常。
我做错了吗?这个测试会起作用吗?是否有其他方法可以强制和测试禁用异常?
谢谢!
【问题讨论】:
-
嗯...核选项。看看这个结果如何会很有趣。
标签: c++ visual-studio-2010 unit-testing exception-handling