Linux中assert头文件,linux系统下如何使用assert函数
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( “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函数了。有兴趣的用户可以去来了解一下。
Linux中assert头文件,linux系统下如何使用assert函数相关推荐
- 如何向linux中添加头文件,linux添加头文件路径
gcc demo.c -o demo -I/tools/libevent/include -L/tools/libevent/lib -levent -I:头文件目录 -L:静态库目录 -l:静态库 ...
- Linux中常用头文件的作用--转
http://blog.sina.com.cn/s/blog_5c93b2ab0100q62k.html 1. Linux中一些头文件的作用: <assert.h>:ANSI C.提供断言 ...
- Linux C try 头文件,linux c 头文件
//1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...
- linux非标准头文件,Linux学习:unix的标准化的实现(Linux中各种限制-数据类型-各种标准化头文件介绍)...
作为Linux的前身,unix标准化是十分重要的.我在这里挑几个重要的点说明. 1:Linux中各种限制.Linux中限制有编译时限制和运行时限制,另外有一些限制是由于我们的实现不同而不同,因此我们需 ...
- linux中什么是文件,linux中什么是文件
linux中什么是文件 1.Linux中所有内容都是以文件的形式保存和管理,即:一切皆文件. 普通文件是文件. 目录(在win下称为文件夹)是文件. 硬件设备(键盘.硬盘.打印机)是文件. 套接字(s ...
- 搜索linux中大于m文件,linux 下查找大于100M的文件(转)
命令行如下 find . -type f -size +1000000k Linux系统下查找大文件或目录的技巧 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢 ...
- linux中运行.pro文件,Linux下pro*c运行配置
在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...
- linux中安装多个mysql_liunx系统下安装多个MySql数据库并做主从配置
在网上搜索了很多资料,都没有看到像样的文档,思路不是很清晰,对第一次安装的朋友来说较为困难,经过长时间的安装尝试和查询网上零碎的知识点,终于成功的完成Linux系统下多MySql数据库安装和主从配置, ...
- linux c memset 头文件,linux下的memset函数
起因]希望对各种类型的数组进行初始化,避免野值 memset函数将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化 ...
最新文章
- typeorm 修改事务_nest.js + typeORM: 身份认证, 事务管理
- java ee期末项目相关
- plsql(轻量版)-存储函数存储过程
- ORACLE查看某个表的索引状态
- sql server 快照_在SQL Server合并复制中应用快照时出现外键问题
- php栏目树,php生成无限栏目树
- diamond专题(一)– 简介和快速使用
- java jenkins_java调用jenkins-client实现连接jenkins服务 互联网技术圈 互联网技术圈
- Axure 基础控件(1-49)
- JavaScript实现哈希表数据结构
- php网页设计课程设计dreamweaver8_Dreamweaver 8.0 多媒体网页制作教程
- 网易2020校招数据分析方向正式批笔试题 解析
- android9.0+wifi叹号,手机wifi连上有个感叹号怎么解决_wifi已连接但有感叹号的处理方法-系统城...
- Oracle存储过程打印输出错误信息、行号,快速排查
- 硬盘开盘证明怎么写,开盘证明范本
- 苹果终止位置共享无法连接服务器,苹果发布临时解决方案指导用户处理macOS无法共享访问Windows的问题...
- 淘宝商品采集上架拼多多店铺(无货源数据采集接口,拼多多商品详情数据,淘宝商品详情数据,京东商品详情数据)接口代码对接教程
- 怎样合理有效的与人争论(讨论)问题?
- echarts3.7.1 用例体验地图
- java compare 和equals,java-在此示例中compareTo和equals方法如何工作?
热门文章
- python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)
- cygwin用命令安装软件_软件安装、命令行、Github
- 计算机会计学ufo报表,计算机会计实践部分工资管理系统.ppt
- 计算机考研逻辑学,管综专硕:走出不考逻辑学专业知识的误区
- java mina多线程_mina2中的线程池
- language mysql_MySql 语言的分类;
- 4 个使用率非常高的 Linux 监控工具
- 皮一皮:经历过的举手报道...
- 微信8.0之后,又悄悄上线新功能:别人“抢不到”的红包!赶紧看看灰度到你了没?...
- 皮一皮:低调的凡尔赛...