errno
From cppreference.com
| ヘッダー <errno.h> で定義 |
||
| #define errno /* 実装定義 */ |
||
errno はプリプロセッサマクロですが(ただし、下記の注を参照)、スレッドローカル(C11以降) な変更可能な左辺値であり、型は int です。いくつかの標準ライブラリ関数は、エラーを示すために正の整数を errno に書き込みます。通常、errno の値は、E で始まり、その後に大文字のアルファベットまたは数字が続くマクロ定数として、<errno.h> にリストされているエラーコードのいずれかに設定されます。
errno の値は、プログラム起動時には 0 です。ライブラリ関数は、エラーが発生したかどうかにかかわらず errno に正の整数を書き込むことが許可されていますが、ライブラリ関数は errno に 0 を格納することはありません。
ライブラリ関数である perror および strerror を使用して、現在の errno の値に対応するエラー条件のテキストによる説明を取得できます。
注:C11まで、C規格には矛盾する要件がありました。errno はマクロであるとしながらも、「errno がマクロであるか、外部リンケージで宣言された識別子であるかは未指定である」とされていました。C11はこの問題を解決し、マクロとして定義されることを要求しています(WG14 N1338 も参照)。
[編集] 例
このコードを実行
#include <errno.h> #include <math.h> #include <stdio.h> void show_errno(void) { const char *err_info = "unknown error"; switch (errno) { case EDOM: err_info = "domain error"; break; case EILSEQ: err_info = "illegal sequence"; break; case ERANGE: err_info = "pole or range error"; break; case 0: err_info = "no error"; } fputs(err_info, stdout); puts(" occurred"); } int main(void) { fputs("MATH_ERRNO is ", stdout); puts(math_errhandling & MATH_ERRNO ? "set" : "not set"); errno = 0; (void)(1.0 / 0.0); show_errno(); errno = 0; (void)acos(+1.1); show_errno(); errno = 0; (void)log(0.0); show_errno(); errno = 0; (void)sin(0.0); show_errno(); }
実行結果の例
MATH_ERRNO is set no error occurred domain error occurred pole or range error occurred no error occurred
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 7.5 Errors <errno.h> (p: TBD)
- K.3.1.3 Use of errno (p: TBD)
- K.3.2 Errors <errno.h> (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.5 Errors <errno.h> (p: TBD)
- K.3.1.3 Use of errno (p: TBD)
- K.3.2 Errors <errno.h> (p: TBD)
- C11標準 (ISO/IEC 9899:2011)
- 7.5 Errors <errno.h> (p: 205)
- K.3.1.3 Use of errno (p: 584)
- K.3.2 Errors <errno.h> (p: 585)
- C99標準 (ISO/IEC 9899:1999)
- 7.5 Errors <errno.h> (p: 186)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.1.3 Errors <errno.h>
[編集] 関連項目
| 標準的なPOSIX互換のエラー条件のためのマクロ (マクロ定数) | |
| 現在のエラーに対応する文字列をstderrに表示する (関数) | |
| (C11)(C11) |
与えられたエラーコードのテキスト版を返す (関数) |
| (C99)(C99)(C99) |
一般的な数学関数で使用されるエラーハンドリングメカニズムを定義する (マクロ定数) |
| C++ のドキュメント errno
| |