C 标准库的 errno.h 头文件它主要是定义了errno整数变量,errno.h 头文件里面是经过系统来调用设置,就如在错误事件中的某些库函数代表了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,所以它能够被一个程序读取和修改。函数
对于errno的值设置刚开始是为0,也能够在适当的时候修改它的值或重置。errno.h 头文件也顶了以一系列表示不一样错误代码的宏,这些宏应扩展为类型为 int 的整数常量表达式。code
接下来就看看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: %d\n", errno); fprintf(stderr, "Error opening file: %s\n", strerror(errno)); } else { fclose(fp); } return(0); }
结果:file
Value of errno: 2Error opening file: No such file or directory EDOM Domain Error
这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM程序
(1)下面是 EDOM 宏的声明。error
#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 value\n"); } errno = 0; val = sqrt(10); if(errno == EDOM) { printf("Invalid value\n"); } else { printf("Valid value\n"); } 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 range\n", x); } else { printf("Log(%f) = %f\n", x, value); } x = 1.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) is out of range\n", x); } else { printf("Log(%f) = %f\n", x, value); } x = 0.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) is out of range\n", x); } else { printf("Log(%f) = %f\n", x, value); } return 0; }
让咱们编译并运行上面的程序,这将产生如下结果:
Log(2.000000) = 0.693147Log(1.000000) = 0.000000Log(0.000000) = -inf