C标准库--错误信息<errno.h>
文章目录
- 简介
- 库宏
- 1)、extern int errno
- 2)、EDOM Domain Error
- 3)、ERANGE Range Error
简介
C 标准库的 errno.h 头文件定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。
在程序启动时,errno 设置为零,C 标准库中的特定函数修改它的值为一些非零值以表示某些类型的错误。您也可以在适当的时候修改它的值或重置为零。
errno.h 头文件定义了一系列表示不同错误代码的宏,这些宏应扩展为类型为 int 的整数常量表达式。
库宏
1)、extern int errno
这是通过系统调用设置的宏,在错误事件中的某些库函数表明了什么发生了错误。
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);}结果:Value of errno: 2Error opening file: No such file or directory
2)、EDOM Domain Error
这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM。
errno = 0;val = sqrt(-10);if(errno == EDOM) {printf("Invalid value \n");}else {printf("Valid value\n");}结果:Invalid value
3)、ERANGE Range Error
这个宏表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。
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);}
结果:Log(2.000000) = 0.693147