标题:大家在写C++程序的时候用assert函数吗?
只看楼主
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
结帖率:60%
 问题点数:0 回复次数:3 
大家在写C++程序的时候用assert函数吗?
如果用,在什么时候用呢?
搜索更多相关主题的帖子: assert 函数 
2008-10-12 15:08
lylyxt
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-11-27
得分:0 
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。

使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>
#define NDEBUG
#include <assert.h>

2008-10-16 14:59
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
得分:0 
一般地,某个变量(状态值或是对象什么),如果我明确知道它应该在什么样个范围下属于正常,注意是在代码没有BUG的条件下的假设,就用到assert,那么如果它出了这个正常范围,就说明自己的代码有BUG,OK,断言了就知道该在什么地方找BUG了。因为BUG都是未知的,我们不知道它在什么地方,这个办法至少可以告诉我们它在哪个地方,或是一个小范围,总比上万行甚至更多的代码里翻要觉得的轻松的多。
assert是调试手段之一,release下该代码是不会被编译的,总之捉虫请趁早。
2008-10-16 18:31
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
得分:0 
谢谢楼上两位了

2008-10-17 22:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-237789-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.703191 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved