C 标准库 - <errno.h>
C 标准库的 errno.h 头文件它主要是定义了errno整数变量,errno.h 头文件里面是通过系统来调用设置,就如在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。 对于errno的值设置刚开始是为0,也可以在适当的时候修改它的值或重置。errno.h 头文件也顶了以一系列表示不同错误代码的宏,这些宏应扩展为类型为 int 的整数常量表达式。 接下来就看看errno.h头文件中定义的宏有哪些: extern int errno 这是通过系统调用设置的宏,在错误事件中的某些库函数表明了什么发生了错误。 (1)这个宏的声明为: extern int errno (2)NA既是他的参数,也是返回值。我们用实例来深入了解他的用法。 (3)例子: #include #include #include extern int errno ; int main (){ FILE *fp; fp = fopen("file.txt","r"); if( fp == NULL ) { fprintf(stderr,"Value of errno: %dn",errno); fprintf(stderr,"Error opening file: %sn",strerror(errno)); } else { fclose(fp); } return(0); } 结果: Value of errno: 2Error opening file: No such file or directory EDOM Domain Error 这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM (1)下面是 EDOM 宏的声明。 #define EDOM some_value (2)参数和返回值跟前面说的那个是一样的 (3)用法的例子: #include #include #include int main(){ double val; errno = 0; val = sqrt(-10); if(errno == EDOM) { printf("Invalid value n"); } else { printf("Valid valuen"); } errno = 0; val = sqrt(10); if(errno == EDOM) { printf("Invalid valuen"); } else { printf("Valid valuen"); } return(0); } 结果: Invalid valueValid value ERANGE Range Error 这个宏表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。 (1)声明 #define ERANGE some_value 下面的实例演示了 ERANGE 宏的用法。 实例 #include #include #include int main() { double x; double value; x = 2.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) is out of rangen",x); } else { printf("Log(%f) = %fn",x,value); } x = 1.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) is out of rangen",value); } x = 0.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) is out of rangen",x); } else { printf("Log(%f) = %fn",value); } return 0; } 让我们编译并运行上面的程序,这将产生以下结果: Log(2.000000) = 0.693147Log(1.000000) = 0.000000Log(0.000000) = -inf (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Ajax 跨域请求
- 使用Ruby on Rails在多个点中拆分字符串
- Swift_3.0 【Swift_3.0 相较于 Swift_2.2 的变化】
- nor Nand and Onenand flash区别总结
- active-directory – 使用C#在Active Directory中的特定OU中
- iphone – 我有注册的应用程序ID,但仍然显示您没有适用于iO
- ruby-on-rails – Ruby on Rails,使用同名枚举的问题
- Reactor模式 - @ libevent by c【转载内容】
- cocos2dx 3.2截屏功能
- ios – UIPanGestureRecognizer和UITapGestureRecognizer同