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

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

先頭へ戻る

errno

概要 エラー番号を表す。
ヘッダ errno.h
形式 extern int _ERRNO;
#define errno _ERRNO;
置換結果 コンパイラの実装次第で大きく変わり得るが、int型の変数を扱うかのように利用できる定義になっている。
詳細 幾つかの標準ライブラリ関数が、エラーの意味を報告するために共同で利用する。設定される値は、正の整数であり、0 はエラー無しを意味する。標準ライブラリ関数が 0 を設定することはない。なお、プログラムが開始された直後には、0 になっている。
errno を利用する関数は、呼び出す前に errno に 0 を設定しておき、関数から処理が帰ってきた直後に、errno の値を調べることによって、エラーの有無や意味を確認できる。
errno の使用について規定されていない標準ライブラリ関数が、errno を 0以外に設定する可能性がある。
errno に格納される値は、標準では ERANGEEDOMEILSEQの3つがある。
注意 errno は、複数の関数が共同利用しているため、他の関数呼び出しで設定された値は簡単に上書きされてしまう。特に、マルチスレッドプログラミングにおいては、使い方が問題になる。
C99以降、数学関数が発生させるエラーについて、errno を使わない処理系があり得る。math_errhandling を参照。
使用例
#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <float.h>

int main(void)
{
    double x;

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

    return 0;
}

実行結果:

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 に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS