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 操作では、_doserrno
に 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 と互換性があります。 ERANGE
、EILSEQ
、および 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