1 /*yvals.h*/ 2 #define _YVALS_H_ 3 4 #define MYEDOM 33 5 #define MYERANGE 34 6 #define MYEFPOS 35 7 #define MYERRMAX 36
1 #define _MY_ERRNO_H_ 2 /* 3 * 這種宏保護與上面的差別。"yvals.h"會被幾個標準頭文件包含, 4 * 它可能在一個預處理中被屢次請求,一旦"yvals.h"變爲預處理的一部分, 5 * 宏保護就會跳過#include預處理指令。這個頭文件也就不會被重複地讀入 6 */ 7 #ifndef _YVALS_H_ 8 #include "yvals.h" 9 #endif 10 11 #define MY_EDOM MYEDOM /*域錯誤,參數值產生的結果沒有定義*/ 12 #define MY_ERANGE MYERANGE /*溢出*/ 13 #define MY_EFPOS MYEFPOS 14 #define MY_NERR MYERRMAX 15 16 extern int errno; 17 #endif
1 /*my_error.c*/ 2 #include "my_errno.h" 3 #undef errno 4 5 int errno = 0;
1 /*my_t_errno.c*/ 2 #include <assert.h> 3 #include <math.h> 4 #include <stdio.h> 5 #include <errno.h> 6 #include "my_errno.h" 7 8 int main() 9 { 10 assert(errno == 0); 11 perror("No error reported as"); 12 errno = MY_ERANGE; 13 assert(errno == MY_ERANGE); 14 perror("Range error reported as"); 15 errno = 0; 16 assert(errno == 0); 17 sqrt(-1.0); 18 assert(errno == MY_EDOM); 19 perror("Domain error reported as"); 20 puts("success testing 'my_errno.h'"); 21 22 return 0; 23 }