次の方法で共有


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 は必ずしもシステム呼び出しによって返されるエラー コードと同じ値に設定されるとは限りません。 I/O 操作では、_doserrnoerrno コードと同等のオペレーティング システムのエラー コードが格納されます。 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 と互換性があります。 ERANGEEILSEQ、および EDOM のみが、ISO C99 標準で指定されます。 完全な一覧については、 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 拡張機能です。 互換性の詳細については、「 Compatibility」を参照してください。

関連項目

グローバル変数
errno 定数
perror, _wperror
strerror_strerror_wcserror__wcserror
strerror_s_strerror_s_wcserror_s__wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno