プログラムの実行中に設定されるエラー コードと、エラー コードに相当する表示用の文字列を保持するグローバル マクロ。
構文
#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 |
ライブラリの数値演算ルーチンでは、errno を呼び出して _matherr を設定します。 別の方法で数値演算エラーを処理するには、_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