一点一滴成长

导航

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 ——金庆

posted on 2016-09-13 16:09  整鬼专家  阅读(1602)  评论(0编辑  收藏  举报