error

errno

在头文件中定义
#define errno / *实现定义的* /

errno是一个预处理器宏,可扩展为线程本地(自C11)可修改类型的左值int。几个标准库函数通过写入正整数来指示错误errno。通常,值的errno设置为<errno.h>以字母E开头的后缀为大写字母或数字的宏常量中列出的错误代码之一。

errno​0​在程序启动时,尽管库函数可以写为正整数errno是否发生了错误,库函数永远保存​0​errno

库函数perrorstrerror可用于获取与当前errno值对应的错误条件的文本描述。

示例

#include <stdio.h> #include <math.h> #include <errno.h> void show_errno(void) { if(errno==EDOM) printf("domain error" if(errno==EILSEQ) printf("illegal sequence" if(errno==ERANGE) printf("pole or range error" if(errno==0) printf("no error" printf(" occurred\n" } int main(void) { printf("MATH_ERRNO is %s\n", math_errhandling & MATH_ERRNO ? "set" : "not set" errno = 0; 1.0/0.0; show_errno( errno = 0; acos(+1.1 show_errno( errno = 0; log(0.0 show_errno( errno = 0; sin(0.0 show_errno( }

输出:

MATH_ERRNO is set pole or range error occurred domain error occurred pole or range error occurred no error occurred

参考

  • C11标准(ISO/IEC 9899:2011):

另请参阅

E2BIG,EACCES,...,EXDEV用于标准POSIX兼容错误条件的宏(宏常量)
PERROR显示当前错误对应的字符串到stderr(函数)
strerrorstrerror_sstrerrorlen_s(C11)(C11)返回给定错误代码(函数)的文本版本
math_errhandlingMATH_ERRNOMATH_ERREXCEPT(C99)(C99)(C99)定义了常用数学函数(宏常量)使用的错误处理机制,