errno

来自cppreference.com
< c‎ | error
定义于头文件 <errno.h>
#define errno /*implementation-defined*/

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 standard (ISO/IEC 9899:2011):
  • 7.5 Errors <errno.h> (p: 205)
  • K.3.1.3 Use of errno (p: 584)
  • K.3.2 Errors <errno.h> (p: 585)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.5 Errors <errno.h> (p: 186)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.1.3 Errors <errno.h>

[编辑] 参阅

标准POSIX兼容的错误条件宏
(宏常量) [edit]
将对应当前错误的字符串显示到stderr
(函数) [edit]
返回给定错误码的文本版本
(函数) [edit]
定义用于常用数学函数的错误处理机制
(宏常量) [edit]