errno
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <errno.h> で定義
|
||
#define errno /*implementation-defined*/ |
||
errno は int 型の スレッドローカルな (C11以上) 変更可能な左辺値に展開されるプリプロセッサマクロです。 標準ライブラリには errno に正の整数を書き込むことでエラーを表す関数がいくつかあります。 一般的に、 errno の値は <errno.h> で文字 E で始まり大文字または数字が続くマクロ定数として定義されているエラーコードのいずれかに設定されます。
プログラム開始時の errno の値は 0 です。 ライブラリ関数は、エラー発生の有無に関わらず errno に正の値を書き込むことがありますが、 errno に 0 を書き込むことはありません。
ライブラリ関数 perror および strerror を使うと、現在の errno の値に対応するエラー状態の説明テキストを取得できます。
ノート: C11 未満の C 標準には矛盾する要件がありました。 それによれば、 errno はマクロであるが、「errno がマクロであるか外部リンケージ付きで宣言された識別子であるかは未規定」でもあります。 C11 ではこれが修正され、マクロとして定義されることが要求されます (WG14 N1338) も参照してください)。
例
Run this code
#include <stdio.h>
#include <math.h>
#include <errno.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;
1.0/0.0;
show_errno();
errno = 0;
acos(+1.1);
show_errno();
errno = 0;
log(0.0);
show_errno();
errno = 0;
sin(0.0);
show_errno();
}
出力例:
MATH_ERRNO is set
no error occurred
domain error occurred
pole or range error occurred
no error occurred
参考文献
- C11 standard (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 standard (ISO/IEC 9899:1999):
- 7.5 Errors <errno.h> (p: 186)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.1.3 Errors <errno.h>
関連項目
| POSIX互換のエラー状態を表すマクロ (マクロ定数) | |
| 現在のエラーに対応する文字列を stderr に出力します (関数) | |
(C11)(C11) |
指定されたエラーコードのテキストバージョンを返します (関数) |
(C99)(C99)(C99) |
一般的な数学関数で使用されるエラー処理方法の定義 (マクロ定数) |
errno の C++リファレンス
| |