程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> C語言中的errno(錯誤報告)用法

C語言中的errno(錯誤報告)用法

編輯:C語言入門知識

C語言標准庫中的錯誤報告用法有三種形式。

1errno

errno在頭文件中定義,如下

 

#ifndef errno
extern int errno;
#endif

 

外部變量errno保存庫程序中實現定義的錯誤碼,通常被定義為errno.h中以E開頭的宏,

所有錯誤碼都是正整數,如下例子

# define EDOM   33      /* Math argument out of domain of function.  */

EDOM的意思是參數不在數學函數能接受的域中,稍後的例子中用到了這個宏。

errno的常見用法是在調用庫函數之前先清零,隨後再進行檢查。

2strerror

strerror在中定義,如下

__BEGIN_NAMESPACE_STD
/* Return a string describing the meaning of the `errno' code in ERRNUM.  */
extern char *strerror (int __errnum) __THROW;
__END_NAMESPACE_STD

函數strerror返回一個錯誤消息字符串的指針,其內容是由實現定義的,字符串不能修改,但可以在後續調用strerror函數是覆蓋。

3perror

perror在中定義,如下

__BEGIN_NAMESPACE_STD
/* Print a message describing the meaning of the value of errno.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern void perror (const char *__s);
__END_NAMESPACE_STD

函數perror在標准錯誤輸出流中打印下面的序列:參數字符串s、冒號、空格、包含errno中當前錯誤碼的錯誤短消息和換行符。在標准C語言中,如果s是NULL指針或NULL字符的指針,則只打印錯誤短消息,而不打印前面的參數字符串s、冒號及空格。

下面是幾個簡單的例子

#include 
#include 
#include 
#include 

int main(void)
{
    errno = 0;
    int s = sqrt(-1);
    if (errno) {
        printf("errno = %d\n", errno); // errno = 33
        perror("sqrt failed"); // sqrt failed: Numerical argument out of domain
        printf("error: %s\n", strerror(errno)); // error: Numerical argument out of domain
    }

    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved