gtest 里面有一段漂亮的宏定义代码
大意就是说如果定义了跑出异常,就要在执行的时候判断,试图捕获异常,并处理异常
如果没有定义就不用管了, 如下的红色代码所示,两段式一样的
# if GTEST_HAS_EXCEPTIONS
# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \try { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} catch (const ::std::exception& gtest_exception) { \
fprintf(\
stderr, \
"\n%s: Caught std::exception-derived exception escaping the " \
"death test statement. Exception message: %s\n", \
::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
gtest_exception.what()); \
fflush(stderr); \
death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
} catch (...) { \
death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
}
# else
# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
# endif
在程序的处理过程中,对于异常的处理很重要。最好能对已知的问题作出级别上的区分;例如上面的代码,是个很好的范例
本文介绍了一个在gtest中优雅处理异常的宏定义技巧。通过条件编译判断是否支持异常,进而采取不同的处理方式:当支持异常时,使用try-catch结构捕获并处理;不支持时,则直接执行语句。这种方式既确保了代码的健壮性,又提高了异常处理的灵活性。
7335

被折叠的 条评论
为什么被折叠?



