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