位置:首页 > 高级语言 > 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