linux系统下如何使用assert函数
只要看得懂程序的人都知道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( “”, “w” );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( “”, “r” );//以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //所以这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
[root@localhost error_process]# gcc badptr.c
[root@localhost error_process]# 。/
: 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函数了。有兴趣的用户可以去来了解一下。
-
Linux运维工程师的岗位职责(15篇)
现如今,需要使用岗位职责的场合越来越多,制定岗位职责可以有效规范操作行为。那么制定岗位职责真的很难吗?以下是小编整理的Linux运维工程师的岗位职责,仅供参考,欢迎大家阅读。Linux运维工程师的岗位职责1职责:1、负责银行数据中心内基础环境交付工作,包含服务器、操...
-
win7磁盘碎片整理
导读:大家知道win7磁盘如何进行碎片整理吗?就跟随本站小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网!1、进入Windows7系统,在桌面任务栏的最左边点击开始按钮。依次选择附件—系统工具—磁盘碎片整理程序,双击打开磁盘碎片整理...
-
win7关闭休眠功能的设置方法
win7关闭休眠功能怎么设置呢?关闭休眠在你下载或者想电脑一直工作下去,是非常有必要的,不然电脑进入休眠就会停止工作,任务无法完成,今天小编给大家说说win7关闭休眠功能方法。win7关闭休眠功能的设置方法1、桌面空白处右键选择“个性化”;2、选择“屏幕保护程序”...
-
操作系统读书工程报告范文
篇一:操作系统读书工程报告一、基本理论阐述1.进程定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。基本介绍:多道程序在执行时,需要共享系统...
相关文章
- Linux系统中strace命令的使用代码
- Linux系统xlsatom命令如何使用
- 如何应对Win8.1系统下taskhost.exe占用CPU过高
- Win10中如何安装SUSE Linux子系统
- Linux系统中smbclient命令的使用方法
- 如何在Linux系统下正确使用tar命令
- Linux Mint Cinnamon下使用vino-server配置桌面共享的方法
- MS SQL Server Management Studio Express安装图文具体步骤
- 托福英语写作范文:Examinations exert a pernicious influence on educat
- 运用RedHat的Kickstart升级Linux系统方法