Namespaces
Variants

errno

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

errno 是一个预处理器宏(但请参阅下方注释),它展开为一个 线程局部 (C11 起) 类型为 int 的可修改左值。多个标准库函数通过向 errno 写入正整数来指示错误。通常, errno 的值会被设置为 <errno.h> 中列出的错误代码之一,这些错误代码是以字母 E 开头后跟大写字母或数字的宏常量。

程序启动时 errno 的值为 0 ,虽然库函数被允许在无论是否发生错误时向 errno 写入正整数,但库函数从不会将 0 存入 errno

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

注意:在C11标准之前,C标准存在相互矛盾的要求,即规定 errno 是宏的同时 声明“未指定 errno 是宏还是具有外部链接的标识符”。C11标准修正了这一问题,要求将其定义为宏(另见WG14 N1338 )。

示例

#include <errno.h>
#include <math.h>
#include <stdio.h>
void show_errno(void)
{
    const char *err_info = "unknown error";
    switch (errno)
    {
        case EDOM:
            err_info = "domain error";
            break;
        case EILSEQ:
            err_info = "illegal sequence";
            break;
        case ERANGE:
            err_info = "pole or range error";
            break;
        case 0:
            err_info = "no error";
    }
    fputs(err_info, stdout);
    puts(" occurred");
}
int main(void)
{
    fputs("MATH_ERRNO is ", stdout);
    puts(math_errhandling & MATH_ERRNO ? "set" : "not set");
    errno = 0;
    (void)(1.0 / 0.0);
    show_errno();
    errno = 0;
    (void)acos(+1.1);
    show_errno();
    errno = 0;
    (void)log(0.0);
    show_errno();
    errno = 0;
    (void)sin(0.0);
    show_errno();
}

可能的输出:

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

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.5 错误 <errno.h> (页: TBD)
  • K.3.1.3 errno 的使用 (页: TBD)
  • K.3.2 错误 <errno.h> (页: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 7.5 错误 <errno.h> (页: TBD)
  • K.3.1.3 errno 的使用 (页: TBD)
  • K.3.2 错误 <errno.h> (页: TBD)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.5 错误 <errno.h> (页: 205)
  • K.3.1.3 errno 的使用 (页: 584)
  • K.3.2 错误 <errno.h> (页: 585)
  • C99标准(ISO/IEC 9899:1999):
  • 7.5 错误处理 <errno.h> (页码: 186)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.1.3 错误处理 <errno.h>

参见

标准POSIX兼容错误条件的宏定义
(宏常量)
stderr 输出当前错误对应的字符串描述
(函数)
返回给定错误码的文本描述
(函数)
定义通用数学函数使用的错误处理机制
(宏常量)