<errno.h>的简单使用
2015-10-06 00:00
330 查看
标准库中的一些函数通过向<errno.h>中声明的int类型errno变量存储一个错误码(正整数)来表示有错误发生.(errno可能实际上是个宏.如果是宏,C标准要求它表示左值,以便可以像变量一样使用.)大部分使用errno变量的函数集中在<math.h>,但也有一些在标准库的其他部分.
假设我们需要使用一个库函数,该库函数通过给errno赋值来产生程序运行出错的信号.在调用这个函数之后,我们可以检查errno的值是否为零,则表示在函数调用过程中有错误发生.举例来说,假如需要检查sqrt函数的调用是否出错,可以使用类似下面的代码:
当使用errno来检测库函数调用中的错误时,在函数调用前将errno置零非常重要.虽然在程序刚开始运行时errno的值为零,但有可能在随后的函数调用中已经被改动了.库函数不会将errno清零,这是程序需要做的事情.
erron中定义了100多种错误消息.详细可以看<errno.h>这个文件
perror函数和strerro函数
void perror(const char *s); //来自<stdio.h>
char *strerror(int errnum); //来自<string.h>
下面看两个变量errno有关的函数,不过这两个函数都不属于<errno.h>
一个使用perror的例子:
如果sqrt调用因定义域错误而错误,perror会产生如下输出:
strerror的函数属于<string.h>.当以错误码为参数调用时,函数会返回一个指针,它指向一个描述这个错误的字符串.例如,调用
可能会显示
假设我们需要使用一个库函数,该库函数通过给errno赋值来产生程序运行出错的信号.在调用这个函数之后,我们可以检查errno的值是否为零,则表示在函数调用过程中有错误发生.举例来说,假如需要检查sqrt函数的调用是否出错,可以使用类似下面的代码:
errno = 0; y = sqrt(x); if (errno != 0 ) { fprintf(stderr,"sqrt error; program terminated.\n"); exit(EXIT_FAILURE); }
当使用errno来检测库函数调用中的错误时,在函数调用前将errno置零非常重要.虽然在程序刚开始运行时errno的值为零,但有可能在随后的函数调用中已经被改动了.库函数不会将errno清零,这是程序需要做的事情.
erron中定义了100多种错误消息.详细可以看<errno.h>这个文件
perror函数和strerro函数
void perror(const char *s); //来自<stdio.h>
char *strerror(int errnum); //来自<string.h>
下面看两个变量errno有关的函数,不过这两个函数都不属于<errno.h>
一个使用perror的例子:
errno = 0; y = sqrt(x); if (errno!= 0) { perror("sqrt error"); exit(1); }
如果sqrt调用因定义域错误而错误,perror会产生如下输出:
sqrt error:Numrical argument of domin
strerror的函数属于<string.h>.当以错误码为参数调用时,函数会返回一个指针,它指向一个描述这个错误的字符串.例如,调用
puts(strerror(EDOM));
可能会显示
Numerial result out of domain.
相关文章推荐
- PCL 室内三维重建
- App开发平台 80%的工作量交给keymob
- 最专业的移动广告开发平台 让您的广告布满世界的每一个角落
- 2015APP开发平台需要多少钱
- 移动广告服务平台 APP广告管理服keymob
- 湖南移动app开发平台 首选keymob移动应用开发工具
- 2015湖南移动开发平台有哪些
- 蜂窝教育Java培训助年轻人成IT高薪人才
- sublime text 安装package control
- JAVA 基础
- JavaScript Date() 对象使用问题。
- Lombok 安装、入门 - 消除冗长的 java 代码
- Hibernate的优缺点总结
- Chrome更新问题
- The list of characters
- centos 基础配置之mysql
- 庆山《得未曾有》摘录
- U盘安装RHEL6
- linux下使用mysql服务
- pta自测一