errno | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


errno

概要

エラー番号を表す。

ヘッダ

errno.h

形式

extern int _ERRNO;
#define errno _ERRNO;

置換結果

実装次第で大きく変わり得るが、int型の変数を扱うかのように利用できる定義になっている。

詳細

いくつかの標準ライブラリ関数が、エラーの意味を報告するために共同で利用する。設定される値は、正の整数であり、0 はエラー無しを意味する。標準ライブラリ関数が 0 を設定することはない。なお、プログラムが開始された直後には、0 になっている。
errno を利用する関数は、呼び出す前に errno に 0 を設定しておき、関数から処理が帰ってきた直後に、errno の値を調べることによって、エラーの有無や意味を確認できる。
errno の使用について規定されていない標準ライブラリ関数が、errno を 0以外に設定する可能性がある。
errno に格納される値は、標準では ERANGEEDOMEILSEQの3つがある。

注意

errno は、複数の関数が共同利用しているため、他の関数呼び出しで設定された値は簡単に上書きされてしまう。特に、マルチスレッドプログラミングにおいては、使い方が問題になる。
数学関数が発生させるエラーについて、errno を使わない処理系があり得る。math_errhandling を参照。

使用例

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <float.h>

int main(void)
{
    errno = 0;  // 直前で 0 を代入しておく
    double x = pow(DBL_MAX, 2.0);
    if (errno == ERANGE) {
        puts("pow関数の結果が表現不可能");
        return 0;
    }
    printf("%lf\n", x);
}

実行結果:

pow関数の結果が表現不可能

関連

errno に格納される標準で定義された値は、ERANGEEDOMEILSEQ の3つがある。

エラーの内容を文字列化したものを strerror関数で取得できる。また、その文字列と同様のものを、perror関数で標準エラーストリームへ出力できる。

解説章

第45章第48章


参考リンク


更新履歴

’2018/4/21 「注意」に math_errhandling について追記。
errno に格納される標準の値について追記。

’2018/4/6 「詳細」に、標準ライブラリ関数が 0以外に設定する可能性と、0 には設定しないことを追記。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る