errno
來自 cppreference.com
定義於標頭檔案 <errno.h> |
||
#define errno /* implementation-defined */ |
||
errno
是一個預處理器宏(但請參閱下面的註釋),它擴充套件為一個 執行緒區域性(C11 起)的可修改的 int 型別左值。幾個標準庫函式透過向 errno
寫入正整數來指示錯誤。通常,errno
的值被設定為 <errno.h> 中列出的錯誤程式碼之一,這些錯誤程式碼是宏常量,以字母 E
後跟大寫字母或數字開頭。
程式啟動時 errno
的值為 0,儘管庫函式可以在發生錯誤或未發生錯誤時向 errno
寫入正整數,但庫函式絕不會在 errno
中儲存 0。
庫函式 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> (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 顯示與當前錯誤對應的字串 (函式) | |
(C11)(C11) |
返回給定錯誤程式碼的文字版本 (函式) |
(C99)(C99)(C99) |
定義常用數學函式使用的錯誤處理機制 (宏常量) |
C++ 文件 關於 errno
|