linux系统下使用assert函数的方法介绍
发布时间:2023-02-23 07:53:46
linux系统下如何使用assert函数?熟悉代码的用户都知道,在Windows下使用VC编写,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会自动忽略掉assert。但是在Linux下,必须要在编译命令中加入-DNDEBUG中,系统编译时才不会将assert编译进去。不然,程序运行时有可能会被assert中断。那linux系统下如何使用assert函数呢?下面,小编就给大家介绍linux系统下使用assert函数的方法。
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不能代替条件过滤


猜你喜欢
- excel如何设置符合条件自动变色?下面小编来教大家。01、首先,我们打开我们电脑上面的excel,然后我们选中一个区域;02、之后我们点击
- 《Excel2003入门动画教程7、Excel表格设置列宽、行高》。演示动画 操作步骤拖拉法:将鼠标移到Excel
- excel表格怎么查看任意一网页中的数据?想要在excel表格中看到任意一网页的数据,该怎么将网页数据导入excel中呢?下面我们就来看看将
- 有不少用户在企业办公的时候,都会为自己的电脑设置一个共享文件夹,这样非常方便协同办公。但是许多新手用户并不知道怎么设置,而今天小编就带着大家
- 瀑布图显示加上或减去值时的累计汇总。 在理解一系列正值和负值对初始值(例如,净收入)的影响时,这种图表非常有用。列采用彩色编码,可以快速将正
- 当我们在输入文档的时候,很多朋友都遇到了一个问题,那就是单击回车后,系统自动给文档添加上了编号,但有时候我们并不需要给文档添加编号,今天我们
- 尽管搜狗输入法中的云计算功能,能帮助用户快速点选相关词语,并且还能大幅提升长句的输入准确率,但是因为云计算功能需要联网,这就导致了有时候在打
- U盘现在是我们使用系统过程中重要的工具,很多用户都是通过U盘进行文件的储存备份及转移,但是有的用户Win10系统读取不了U盘,那这个问题要怎
- 很多人在使用excel的时候,经常会发生不小心关掉excel的情况,而很多时候下都是没有保存的,这样一来,会浪费很多时间重新再制作表格。其实
- 电脑系统通常自带一些简单的小游戏,有些用户还是挺喜欢玩这些游戏的,那么Win10有没有自带游戏?其实是有的,Win10中有五款自带的小游戏:
- Windows10秋季创意者更新如何配置颜色筛选器?颜色筛选器是Windows10秋季创意者更新的一大新功能,该功能可以让用户更轻松地查看和
- Mac上强大的中文pdf编辑器推荐给大家,口碑极佳,拥有出色性能以及丰富的 PDF 编辑功能,可以对 PDF 增加文字、涂鸦、备忘、图形、高
- Everything是一款体积极小、搜索文件速度快的 文件搜索工具,它能够在搜索前就把文件和文件夹都列出来,比起微软自带的搜索功能可方便多啦
- 我们在使用excel进行数据管理的时候,有时候需要一些结果更加突出,这样便于我们观看,我们可以通过不同的结果设置不同的样式,今天我们采用Ex
- 雷神911 Plus 2代是一款娱乐笔记本电脑,这款电脑搭载了英特尔酷睿第10代i7处理器以及发烧级核芯显卡,能够满足用户们日常娱乐使用需求
- cad重新生成命令的使用方法:首先进入CAD的操作界面,找到圆形命令;然后绘制一个圆形,并输入re命令;接着选择刚刚绘制的圆形;最后按下回车
- 通常情况下,你可以利用Powerpoint屏幕左下角的视图按钮在几种不同的视图状态(普通视图、幻灯片浏览视图、幻灯片放映)之间进行快速切换。
- 很多用户使用的都是win10系统,在win10系统中有一个动态锁定功能,当用户不在电脑前时,就会自动监测用户与设备之前的距离,达到一定距离就
- 1.Word表格整体大小的调整:通过将鼠标移动到表格右下角,然后按住右健不放拖动即可调整表格整体的大小。此方法调整的结果使表格中所有单元格的
- >= 大于等于,例if(a1>=50,公式2,公式1) 单元A1大于等于50执行公式2,否则执行公式1<= 小于等于,例i