命名空间
变体
操作

errno

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

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

程序启动时 errno 的值为 0,尽管库函数可以在发生错误或未发生错误时向 errno 写入正整数,但库函数绝不会在 errno 中存储 0

库函数 perrorstrerror 可用于获取与当前 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> (p: 待定)
  • K.3.1.3 errno 的使用 (p: 待定)
  • K.3.2 错误 <errno.h> (p: 待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.5 错误 <errno.h> (p: 待定)
  • K.3.1.3 errno 的使用 (p: 待定)
  • K.3.2 错误 <errno.h> (p: 待定)
  • 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>

[编辑] 另请参阅

标准 POSIX 兼容错误条件的宏
(宏常量) [编辑]
stderr 显示与当前错误对应的字符串
(函数) [编辑]
返回给定错误代码的文本版本
(函数) [编辑]
定义常用数学函数使用的错误处理机制
(宏常量) [编辑]
C++ 文档 关于 errno