errno
|
ヘッダーで定義
<errno.h>
|
||
|
#define errno /* implementation-defined */
|
||
errno
はプリプロセッサマクロ(ただし下記の注記参照)であり、
スレッドローカル
(C11以降)
の型
int
の変更可能な左辺値に展開されます。いくつかの標準ライブラリ関数は、正の整数を
errno
に書き込むことでエラーを通知します。一般的に、
errno
の値は、
<errno.h>
に記載されているマクロ定数のうち、文字
E
で始まり大文字または数字が続くエラーコードのいずれかに設定されます。
プログラム起動時における
errno
の値は
0
であり、ライブラリ関数はエラーの有無にかかわらず正の整数を
errno
に書き込むことが許可されていますが、ライブラリ関数が
0
を
errno
に格納することは決してありません。
ライブラリ関数
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 エラー <errno.h> (p: TBD)
-
- K.3.1.3 errnoの使用 (p: TBD)
-
- K.3.2 エラー <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 エラー <errno.h> (p: 205)
-
- K.3.1.3 errnoの使用 (p: 584)
-
- K.3.2 エラー <errno.h> (p: 585)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.5 エラー <errno.h> (p: 186)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.1.3 エラー <errno.h>
関連項目
|
標準的なPOSIX互換のエラー条件のためのマクロ
(マクロ定数) |
|
|
現在のエラーに対応する文字列を
stderr
に表示する
(関数) |
|
|
(C11)
(C11)
|
指定されたエラーコードのテキスト版を返す
(関数) |
|
(C99)
(C99)
(C99)
|
一般的な数学関数で使用されるエラー処理メカニズムを定義する
(マクロ定数) |
|
C++ documentation
for
errno
|
|