linux 错误处理类函数

发布时间:2017-2-25 12:31:28 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"linux 错误处理类函数",主要涉及到linux 错误处理类函数方面的内容,对于linux 错误处理类函数感兴趣的同学可以参考一下。

 错误处理类函数设计的有errno.h,stdilo.h的头文件当中。      clearerr()函数,清除流中的结束指示符和错误指示符,void clearerr(FILE *fp)  用于清楚与fp相关文件结束指示符和错误指示符      feof()函数,int feof(FILE *FP)当与fp流相关的文件结束指示符被设置时,feof函数返回一个非零值      ferror()函数,int ferror 当与流相关文件出错指示符被设置时,函数返回一个非零值     perror()函数,void perror(const char *str)用来输入字符串s以及与全局变量errno中的整数值相对应的出错信息,具体出错信息的内容依赖于实现      errno函数,在头文件errno.h中定义了一个全局变量errno,这个变量再去爱函数运行完成后,底层库会自动记录函数运行后的状态,正直表明运行正常,复制表明错误的类型,需要注意的是,errno不需要在外部申明,病区有时候errno=-1并不表明出现了错误,所以最好需要检测的函数被钓友之前对其进行置零错左    errno在标准c库中只有两个错误值,EDOM 域错误,ERANGE 得到的结果越界    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; } [[email protected] error_process]# gcc badptr.c [[email protected] 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不能代替条件过滤

上一篇:java中抽象类与接口的区别
下一篇:linux下面长跳函数的使用

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。