errno
、_doserrno
、_sys_errlist
和 _sys_nerr
全域巨集,具有程式執行期間所設定的錯誤碼,以及用於顯示的錯誤碼的字串對應項目。
語法
#define errno (*_errno())
#define _doserrno (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())
備註
在程式啟動期間,執行階段會將 errno
和 _doserrno
設為 0。 errno
設定於系統層級呼叫發生錯誤時。 由於 errno
保存最後將其設定的呼叫值,此值也許可以由後續的呼叫變更。 在錯誤上設定 errno
的運行時間連結庫呼叫不會在成功時清除 errno
。 一律在某個可能會設定 errno
的呼叫之前,立即呼叫 _set_errno(0)
將其清除,並且在設定 errno 的呼叫之後立即檢查。
在錯誤時, errno
不一定設定為與系統呼叫所傳回之錯誤碼相同的值。 _doserrno
會針對 I/O 作業儲存與 errno
程式碼相等的作業系統錯誤碼。 針對大部分的非 I/O 作業,不會設定 的值 _doserrno
。
每個 errno
值都會與 中的 _sys_errlist
錯誤訊息相關聯,其中可以使用其中 perror
一個函式來列印,或使用其中 strerror
一個 或 strerror_s
函式儲存在字串中。 perror
和 strerror
函式會使用 _sys_errlist
陣列和 _sys_nerr
(_sys_errlist
中的項目數) 來處理錯誤資訊。 基於程式碼的安全考量,_sys_errlist
和 _sys_nerr
已遭到取代。 建議您使用更安全且更具功能的版本,而非全域巨集,如下所示:
全域巨集 | 功能對等專案 |
---|---|
_doserrno |
_get_doserrno , _set_doserrno |
errno |
_get_errno , _set_errno |
_sys_errlist , _sys_nerr |
strerror_s 、 、 _strerror_s 、 _wcserror_s __wcserror_s |
藉由呼叫 _matherr
來設定errno
連結庫數學例程。 若要以不同方式處理算術錯誤,請根據 _matherr
參考描述撰寫自己的常式,並命名為 _matherr
。
所有 errno
值都是 中 <errno.h>
預先定義的常數,且與 UNIX 相容。 在 ISO C99 標準中只有指定 ERANGE
、EILSEQ
和 EDOM
。 如需完整清單,請參閱 errno
常數。
需求
全域巨集 | 必要的標頭 | 選擇性標頭 |
---|---|---|
errno |
<errno.h> 或 、<stdlib.h> <cerrno> 或 <cstdlib> (C++) |
|
_doserrno 、 、 _sys_errlist _sys_nerr |
<stdlib.h> 、 <cstdlib> (C++) |
<errno.h> 、 <cerrno> (C++) |
_doserrno
、_sys_errlist
和 _sys_nerr
是 Microsoft 擴充功能。 如需相容性詳細資訊,請參閱相容性。
另請參閱
全域變數
errno
常數
perror
, _wperror
strerror
、 、 _strerror
、 _wcserror
__wcserror
strerror_s
、 、 _strerror_s
、 _wcserror_s
__wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應