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函数了。有兴趣的用户可以去来了解一下。
猜你喜欢
- 1.打开Excel表格,接着点击“插入函数”。 2.将函数的类别选为“全部”,然后下来找到“LOWER”并点击。
- wps软件一直是用户在需要编辑文件的情况时的首选办公软件,因为在wps软件中有着其它热门办公软件强大的功能支持,用户在这些功能的加持下可以轻
- 1、打开WPS2013文字程序,单击“插入”选项卡功能区中的“表格”命令,在弹出的表格区中使用鼠标选择需要插入的表格行列数。图1在WPS20
- 如何设置Win11鼠标光标颜色?有部分用户看腻了自己鼠标光标的颜色,想要对其进行颜色设置,从而让自己的桌面操作更有个性,那么Win11系统鼠
- Win10安全删除选项的功能是在移动设备拔出电脑之前给设备停电,从而防止损伤硬件。但是有些用户发现他们的Win10系统竟然没有安全删除硬件的
- 滴答清单怎么放到桌面?滴答清单支持Web、iOS、Android、Chrome、Firefox、微信,还可以在你的网络日历中订阅滴答清单,那
- Defender Antivirus是Microsoft Windows 11操作系统的默认防病毒解决方案,默认情况下它是打开的。但是有用户
- 背景样式是PowerPoint 2013中预设的背景格式,其随PowerPoint内置的主题一起提供,使用的主题不同,背景样式效果也各不相同
- WPS表格中有一个冻结窗格的功能,尤其是面对大量数据的表格,来回拖动滚动条太麻烦。此时,我们可以冻结窗格,这样就轻松多了。但是要怎么做呢?下
- 1、条件判断:函数IF如果业绩大于等于5000,就显示“达标”,否则显示空。 输入公式:=IF(C2>=5000,”达标”,
- 有部分Win11用户在使用麦克风的时候遇到了无法找到输入设备的提示,导致无法正常使用,这种情况应该怎么解决呢?首先你需要先确认一下你的麦克风
- 1.首先,咱们双击打开win7旗舰版电脑中的word程序,在打开的程序面板中,咱们单击Office按钮,这个时候会弹出一个菜单,咱们直接点击
- 欢迎观看illustrator教程,小编带大家学习 illustrator 的基本工具和使用技巧,了解如何在 AI 中制作新文档。在illu
- Win10系统是目前市面上使用用户最大的Windows操作系统了,但是对于Win10系统来说,依旧存在非常多的不稳定性,而最近有不少用户在更
- 重复文件可能会很麻烦,因为它们不仅会占用磁盘空间(可用于其他用途),还会使您的备份变得混乱。此外,文件的双重或更多副本可能会导致混淆,最好定
- excel表格怎么放大打印?excel中的表格想要放大打印,该怎么设置呢?下面我们就来看看excel表格设置放大打印的的教程,需要的朋友可以
- Office 2010 Toolkit 2.0使用方法Office 2010 Toolkit 2.0是迷你KMS的更新换代版本.虽然是单一可
- 这篇教程是向脚本之家的朋友介绍在word中简单绘制立体五角星方法,教程很不错,推荐到脚本之家,一起来看看吧大家都会用的word,那么有时在文
- 当我们使用电脑时,我们总是会遇到一些问题,例如文件系统错误。实际上,这些原因可能是由于不正确的关机所致。当然,可能还有其他原因。那么win7
- 1、先搞清楚,这个进程是干什么的?是否影响搜狗拼音输入法的正常使用?有人说这是属于细胞词库管理的程序。看看吧,使用快捷键:Ctrl+Shif