C 標準庫 -

C 標準庫的 errno.h 頭文件它主要是定義了errno整數變量,errno.h 頭文件裏面是經過系統來調用設置,就如在錯誤事件中的某些庫函數代表了什麼發生了錯誤。該宏擴展爲類型爲 int 的可更改的左值,所以它能夠被一個程序讀取和修改。函數

對於errno的值設置剛開始是爲0,也能夠在適當的時候修改它的值或重置。errno.h 頭文件也頂了以一系列表示不一樣錯誤代碼的宏,這些宏應擴展爲類型爲 int 的整數常量表達式。code

接下來就看看errno.h頭文件中定義的宏有哪些:事件

extern int errno

這是經過系統調用設置的宏,在錯誤事件中的某些庫函數代表了什麼發生了錯誤。數學

(1)這個宏的聲明爲:編譯

extern int errno

(2)NA既是他的參數,也是返回值。咱們用實例來深刻了解他的用法。變量

(3)例子:擴展

#include #include #include

extern int errno ;

int main (){

  FILE *fp;

  fp = fopen("file.txt", "r");

  if( fp == NULL )

    {

       fprintf(stderr, "Value of errno: %d\n", errno);

       fprintf(stderr, "Error opening file: %s\n", strerror(errno));

    }

    else

     {

       fclose(fp);

    }

    return(0);
}

結果:file

Value of errno: 2Error opening file: No such file or directory

EDOM Domain Error

這個宏表示一個域錯誤,它在輸入參數超出數學函數定義的域時發生,errno 被設置爲 EDOM程序

(1)下面是 EDOM 宏的聲明。error

#define EDOM some_value

(2)參數和返回值跟前面說的那個是同樣的

(3)用法的例子:

#include
#include
#include

int main(){

   double val;

   errno = 0;

   val = sqrt(-10);

   if(errno == EDOM)

    {

      printf("Invalid value \n");

    }

     else

    {

      printf("Valid value\n");

    }

   errno = 0;

   val = sqrt(10);

   if(errno == EDOM)

      {

       printf("Invalid value\n");

     }

     else

    {

     printf("Valid value\n");

    }

   return(0); 
}

結果:

Invalid valueValid value

ERANGE Range Error

這個宏表示一個範圍錯誤,它在輸入參數超出數學函數定義的範圍時發生,errno 被設置爲 ERANGE。

(1)聲明

#define ERANGE some_value

下面的實例演示了 ERANGE 宏的用法。

實例

#include

#include

#include

int main()

{

  double x;

  double value;

  x = 2.000000;

  value = log(x);

  if( errno == ERANGE )

   {

     printf("Log(%f) is out of range\n", x);

   } else {

     printf("Log(%f) = %f\n", x, value);

             }

  x = 1.000000;

  value = log(x);

  if( errno == ERANGE )

  {

    printf("Log(%f) is out of range\n", x);

   } else {

     printf("Log(%f) = %f\n", x, value);

  }

  x = 0.000000;

  value = log(x);

  if( errno == ERANGE )

  {

     printf("Log(%f) is out of range\n", x);

  } else {

    printf("Log(%f) = %f\n", x, value);

  }

  return 0;

  }

讓咱們編譯並運行上面的程序,這將產生如下結果:

Log(2.000000) = 0.693147Log(1.000000) = 0.000000Log(0.000000) = -inf
相關文章
相關標籤/搜索