分享方式:


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 函式儲存在字串中。 perrorstrerror 函式會使用 _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 標準中只有指定 ERANGEEILSEQEDOM。 如需完整清單,請參閱 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