boost:断言

这篇博客介绍了如何使用Boost库中的BOOST_ASSERT和BOOST_ASSERT_MSG宏进行断言检查,以及如何在预处理阶段禁用这些断言。在启用自定义断言处理器的情况下,即使在release模式下,断言也会触发,并通过用户定义的函数输出详细信息,例如表达式、函数名、文件和行号。示例中展示了如何利用Qt的qDebug函数来实现这一功能。
摘要由CSDN通过智能技术生成
#include <boost/assert.hpp>

int main()
{
    int a = 177;
    BOOST_ASSERT(a < 99);//等同于标准库的 assert()
    BOOST_ASSERT_MSG(a < 99,"a应该小于99");
}

默认这两个宏仅在debug模式下有用。

禁用断言

在导入头文件 “boost/assert.hpp” 之前添加:

#define BOOST_DISABLE_ASSERTS

可使上面两个断言的宏不起作用。

拓展用法

如果在导入头文件之前添加:

#define BOOST_ENABLE_ASSERT_HANDLER

那么:

  1. 在release模式断言也将运行。
  2. 处理断言的方式不是弹出弹窗,而是将断言信息发到两个函数,函数已经定义好,需要用户自己实现其内容。
#define BOOST_ENABLE_ASSERT_HANDLER
#include <boost/assert.hpp>

namespace boost
{
    //处理BOOST_ASSERT
    void assertion_failed(char const * expr,
                          char const * function,
                          char const * file,
                          long line)
    {
        qDebug()<<"断言失败assertion_failed:"<<expr<<Qt::endl
                                            <<function<<Qt::endl
                                            <<file<<Qt::endl
                                            <<line;
    }
    
    //处理BOOST_ASSERT_MSG
    void assertion_failed_msg(char const * expr,
                              char const * msg,
                              char const * function,
                              char const * file,
                              long line)
    {
        qDebug()<<"断言失败assertion_failed_msg:"<<expr<<Qt::endl
                                                <<function<<Qt::endl
                                                <<file<<Qt::endl
                                                <<line<<Qt::endl
                                                <<msg;
    }
}

int main()
{
    int a = 177;
    BOOST_ASSERT(a < 99);
    BOOST_ASSERT_MSG(a < 99,"a应该小于99");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值