boost-断言
标准assert宏的原型声明在<assert.h>中,其作用是如果它的测试条件为假,则调用abort()终止程序执行,程序退出的时候会弹出一个错误提示框,并向控制台输出所在文件及行号。assert()只针对debug版本,在Release版本中assert()是无效的。
使用建议:每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败。
boost中的BOOST_ASSERT有两点扩展功能:
1. 可以通过定义BOOST_DISABLE_ASSERTS使在debug版本中也能停用BOOST_ASSERT()。
2. 可以通过定义BOOST_ENABLE_ASSERT_HANDLER使断言出错的时候调用自定义的函数:
如果定义了 BOOST_ENABLE_ASSERT_HANDLER,BOOST_ASSERT失败则会调用::boost::assertion_failed(),boost / assert.hpp中只声明了assertion_failed(), 可以自己定义它,它有4个参数, 分别是出错表达式串, 函数名, 文件名, 行号。
如果未定义BOOST_ENABLE_ASSERT_HANDLER,则会调用标准的assert().
#define BOOST_ENABLE_ASSERT_HANDLER #include "boost/assert.hpp" namespace boost { void assertion_failed(char const * expr, char const * function, char const * file, long line) { //todo } } int main() { BOOST_ASSERT(false); return 0; }
转载出处及参考:http://blog.csdn.net/liangkaiming/article/details/5899655 ——liangkaiming
http://blog.csdn.net/jq0123/article/details/4470569 ——金庆