文字
分享

在头文件<errno.h>中定义



#define errno / *实现定义的* /



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

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

库函数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 setpole or range error occurred
domain error occurred
pole or range error occurred
no error occurred


参考

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

    • 7.5错误<errno.h>(p:205)

    • K.3.1.3使用errno(p:584)

    • K.3.2错误<errno.h>(p:585)

  • C99标准(ISO/IEC 9899:1999):

    • 7.5错误<errno.h>(p:186)

  • C89 / C90标准(ISO/IEC 9899:1990):

    • 4.1.3错误<errno.h>

另请参阅

E2BIG,EACCES,...,EXDEV

用于标准POSIX兼容错误条件的宏(宏常量)

PERROR

显示当前错误对应的字符串到stderr(函数)

strerrorstrerror_sstrerrorlen_s(C11)(C11)

返回给定错误代码(函数)的文本版本

math_errhandlingMATH_ERRNOMATH_ERREXCEPT(C99)(C99)(C99)

定义了常用数学函数(宏常量)使用的错误处理机制,