名稱空間
變體
操作

errno

來自 cppreference.com
< 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