调试时的Assert用法

 1234

  Assert断言类似于头文件保护技术,在调试代码时有重要的作用。基本思想(C++ Primer):程序可以 包含一些用于调试的代码,但是这些代码只在开发程序时使用。但应用程序编写完成准备发布时,要先屏蔽掉调试代码。这种方法用到两项预处理功能:assert和NDEBUG。

assert预处理宏(头文件cassert)

表达式:assert(expr),如果expr为假(即0),assert输出信息并终止程序的执行。如果表达式为真(即非0),assert什么 也不做。

 

#include "stdafx.h"
#include <cassert>
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	int a=5;
	assert(a>4);
	a=3;
	assert(a>4);

	system("pause");
	return 0;
}

结果如图:

 


 

NDEBUG预处理变量

assert的行为依赖于一个名为NDEBUG的预处理变量的状态。如果定义了NDEBUG,则assert什么也不做。默认状态没有定义NDEBUG,此时assert将执行运行时的检测。使用#define NDEBUG来关闭调试状态,这个宏定义需要在#include<cassert>之前。定义NDEBUG能避免检测各种条件所需的运行时开销,因为当前并不执行断言assert。

 

#include "stdafx.h"
#define NDEBUG
#include <cassert>
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	int a=5;
	assert(a>4);
	a=3;
	assert(a>4);

	system("pause");
	return 0;
}

结果:

 


需要注意的是:

1. 使用断言尽量只检测一个条件,多个条件一起检测时无法知道是哪条语句出错。

2. 不要在断言assert中执行改变环境变量的语句,如assert(i++>5),因为断言assert只在程序开发时使用,发布正式版本时会禁用。

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值