名前空間
変種
操作

errno

提供: cppreference.com
< c‎ | error
ヘッダ <errno.h> で定義
#define errno /*implementation-defined*/

errnoint 型の スレッドローカルな (C11以上) 変更可能な左辺値に展開されるプリプロセッサマクロです。 標準ライブラリには errno に正の整数を書き込むことでエラーを表す関数がいくつかあります。 一般的に、 errno の値は <errno.h> で文字 E で始まり大文字または数字が続くマクロ定数として定義されているエラーコードのいずれかに設定されます。

プログラム開始時の errno の値は 0 です。 ライブラリ関数は、エラー発生の有無に関わらず errno に正の値を書き込むことがありますが、 errno0 を書き込むことはありません。

ライブラリ関数 perror および strerror を使うと、現在の errno の値に対応するエラー状態の説明テキストを取得できます。

[編集]

#include <stdio.h>
#include <math.h>
#include <errno.h>
 
void show_errno(void)
{
    if(errno==EDOM)   printf("domain error");
    if(errno==EILSEQ) printf("illegal sequence");    
    if(errno==ERANGE) printf("pole or range error");
    if(errno==0)      printf("no error");
    printf(" occurred\n");
}
 
int main(void)
{
    printf("MATH_ERRNO is %s\n", 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
pole or range 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互換のエラー状態を表すマクロ
(マクロ定数) [edit]
現在のエラーに対応する文字列を stderr に出力します
(関数) [edit]
指定されたエラーコードのテキストバージョンを返します
(関数) [edit]
一般的な数学関数で使用されるエラー処理方法の定義
(マクロ定数) [edit]