linux系统下如何使用assert函数?
发布时间:2023-11-26 08:41:48
只要看得懂程序的人都知道assert,在Windows下使用VC编写,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会自动忽略掉assert。但是在Linux下,必须要在编译命令中加入-DNDEBUG中,系统编译时才不会将assert编译进去。不然,程序运行时有可能会被assert中断。那linux系统下如何使用assert函数呢?下面就和大家说一下linux系统下使用assert函数的方法。
步骤如下:
assert宏的原型定义在《assert.h》中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include 《assert.h》
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
请看下面的程序清单badptr.c:
#include 《stdio.h》
#include 《assert.h》
#include 《stdlib.h》
int main( void )
{
FILE *fp;
fp = fopen( “test.txt”, “w” );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( “noexitfile.txt”, “r” );//以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //所以这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# 。/a.out
a.out: badptr.c:14: main: Assertion `fp‘ failed.
已放弃
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含#include 《assert.h》的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include 《stdio.h》
#define NDEBUG
#include 《assert.h》
用法总结与注意事项:
1)在函数开始处检验传入参数的合法性
如:
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize《=0表示清除缓冲区
assert(nNewSize 》= 0);
assert(nNewSize 《= MAX_BUFFER_SIZE);
。。。
}
2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
不好: assert(nOffset》=0 && nOffset+nSize《=m_nInfomationSize);
好: assert(nOffset 》= 0);
assert(nOffset+nSize 《= m_nInfomationSize);
3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题
错误: assert(i++ 《 100)
这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
正确: assert(i 《 100)
i++;
4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
5)有的地方,assert不能代替条件过滤
上述也就是linux系统下使用assert函数方法的全部内容了。如你还不知道在linux系统下如何使用assert函数的,不妨请你先看看上述的内容啊!看完了你也就知道怎么使用assert函数了。有兴趣的用户可以去来了解一下。
猜你喜欢
- 这篇教程是向脚本之家的朋友分享excel簇状柱形图的变形,教程真的很不错,很值得大家学习,推荐到脚本之家,有兴趣的朋友快快来学习吧excel
- 教你创建xp隐藏账户,已经测试过可以用,只在XP Professional(专业版)中测试过,家用版据说不可以,感兴趣的朋友可以参考下哈选中
- Win10专业版系统是一款功能十分强大,简单好用的操作系统,其中就有改变任务栏颜色的功能,有的用户天天看着同一个颜色有点看腻了,想要改变一下
- 苹果在今日凌晨发布了 iOS 13.3 正式版,在这个新版本中,苹果对于信息功能进行了大改进,信息界面有了新变化,新增“垃圾信息过滤”功能,
- 有很多网友喜欢Win10内置的锁屏壁纸,觉得很好看,想将它们提取出来保存。那么大家知道这些壁纸的路径在哪里吗?该如何将它们提取出来呢?跟小编
- 最近有winxp用户在操作电脑删除一些垃圾文件的时候出现提示无法读源文件或磁盘,遇到这种问题我们该如何解决呢?其实解决方法很简单。下面小编就
- 如果有感觉自己的电脑开机速度很慢的话,今天小编给大家分享的这篇文章就是关于怎么加快电脑开机速度的,大家有需要的话,欢迎前来观看。1、先在电脑
- 在处理财务数据的过程中,如果需要对某些数据投资预算的数据进行处理,可以使用FV函数对投资预算的数据进行处理,该函数是基于固定利率和等额分期的
- 雨林木风XP系统鼠标驱动程序未更新导致鼠标失效。驱动程序是计算机系统中非常重要的一部分。这需要时间,键盘和鼠标将提前安装相应的驱动程序。虽然
- 在Excel操作中,有时会使用排序功能使我们更清晰的看到工作数据,那么excel怎么排序?下面小编就为大家介绍excel表格排序方法,来看看
- 咱们在 操纵Word文档 停止 一样平常办公时, 常常 需求 输出 林林总总的文档,当 咱们从网站 大概 其余 处所复制 过去数据的 时分,
- 英雄联盟是腾讯旗下的一款热门游戏,玩的人非常多,但最近有windows8系统用户反映,电脑无法安装lol英雄联盟,那么win8系统lol安装
- 在任务栏上面的那些快捷方式图标都是靠左接近开始按钮进行排列的,但是一些美化达人会想要将图标居中,本例为大家讲解的是将图标居中显示的方法&nb
- PDF一张纸怎么打印多页文件?pdf多页文件想要打印到一页纸张上,该怎么打印呢?下面我们就来看看PDF一页多张打印的技巧,需要的朋友可以参考
- 联想台式电脑怎么重装系统Win7?当我们的电脑使用时间长了,很容易会出现运行变缓慢,系统垃圾过多,且难以清理和优化的情况,对此小编建议直接重
- 有的时候我们在整理硬盘空间的时候,无意间发现硬盘的空间变小了,这是怎么回事呢?后来知道原来这是硬盘空间丢失的现象。小编今天就给你们准备了解决
- 自从iOS 14.5 苹果地图(Apple Maps)启用汇报事件功能,这项功能5月在美国和中国地区开放。目前可以通过iPhone 内建「地
- 微软今天推送了Windows 10创作者更新预览版15031,带来一些新功能,同时也有一些已知问题。下文小编就为大家带来详细介绍,一起看看吧
- Excel2016相比以往的版本新增了很多功能,不过对于不够熟悉的excel小伙伴来说,用到的功能非常少,今天小编带来了Excel2016工
- Excel用SUMPRODUCT函数进行分组排名,对每个小组内的总量进行排名在H2单元格中输入公式:=SUMPRODUCT(($B$2:$B