位置:首頁 > 高級語言 > C語言教學 > C語言錯誤處理

C語言錯誤處理

因此C編程不提供錯誤處理的直接支持,但作為一個係統編程語言,它為您提供了在較低的水平訪問返回值的形式。大多數C或甚至是Unix函數調用返回-1或NULL的情況下,任何的錯誤,並設置錯誤代碼errno設置是全局變量,並表示任何函數調用時發生了錯誤。可以在<error.h>頭文件中定義的各種錯誤代碼。

所以,C程序員可以檢查返回值,並可以采取適當的動作取決於返回值。作為一個很好的做法,開發人員應該設置 errno 為0 在程序初始化時。0表示冇有在程序冇有錯誤。

errno, perror() 和 strerror()

C編程語言提供perror()和strerror()函數可以被用來顯示與錯誤號相關聯的文本消息。

  • perror()函數顯示了傳遞給它的字符串,後跟一個冒號,一個空格,當前errno值的文字表述。

  • strerror()函數返回一個指向當前errno值的文字表述。

讓我們試著來模擬錯誤情況,並嘗試打開一個不存在的文件。在這裡使用兩種功能來顯示的使用,但可以使用打印一個錯誤或多種方式。需要注意一點是,應該使用標準錯誤文件流輸出的所有錯誤。

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "Value of errno: %d
", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s
", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

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

除零錯誤

它是在一次除以任意數時,程序員不檢查是否一個除數為零,最後它創建一個運行時錯誤的程序。

下麵的代碼修複此通過檢查除數為0 - 除以零:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...
");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d
", quotient );

   exit(0);
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Division by zero! Exiting...

程序退出狀態

它是一種常見的做法是退出情況下是一個成功的操作之後為EXIT_SUCCESS 值。這裡,EXIT_SUCCESS是一個宏,它被定義為0。

如果在程序中的錯誤條件發生錯誤,那麼應該退出其定義狀態EXIT_FAILURE的值為-1。因此,讓我們寫上麵的程序如下:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...
");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d
", quotient );

   exit(EXIT_SUCCESS);
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Value of quotient : 4