English 中文(简体)
C. 傲慢处理
  • 时间:2024-12-22

C - Error Handpng


Previous Page Next Page  

因此,C方案拟订没有直接支持错误处理,而是系统方案拟订语言,它使你能够以回报价值的形式获得较低级别的准入。 在出现任何错误时,C或甚至Unix的大多数职能都要求返回-1或NUL,并设定错误代码rno。 它是一个全球性的变量,表明在任何职能呼吁中都发生了错误。 你们可以发现在“设计”中界定的各种错误;标题文件。

因此,一名C方案管理员可以检查返还的数值,并根据收益价值采取适当行动。 在启动一项方案时,树立起手法,是一种良好做法。 价值0表示该方案没有错误。

errno, perror(). and strerror()

C方案拟订语言提供perror()strerror(>功能,可用于显示与errno相关的文本信息。

    perror() 功能显示你向它传递的画面,然后是上校,一个空间,然后是目前胎面价值的文字表述。

    strerror(>>功能,该功能使目前errno值的文字表述更为清晰。

让我们尝试模拟错误状况,并试图开启不存在的档案。 在此,我用这两种功能显示使用情况,但你可以采用一种或多种方式印刷你的错误。 值得注意的第二个要点是,你应当使用stderr。 档案将产生所有错误。

#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

Divide by Zero Errors

通常的问题是,在分配任何数目时,方案制定者如果不核对一位分裂者为零,最后会产生一个错误。

下面的法典通过检查分歧者在分割之前是否为零而加以确定——

#include <stdio.h>
#include <stdpb.h>

main() {

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

   exit(0);
}

如果上述法典得到编纂和执行,则会产生以下结果:

Division by zero! Exiting...

Program Exit Status

有一种共同的做法,即从出口价值中撤出。 在成功运行后推出的方案时,保持安全。 这里,EXIT-SUCCESS是一种宏观,被定义为0。

如果你的方案有错误条件,你即将出门,那么你就应当离开其地位,即被定义为1。 因此,请在以上方案中写如下:

#include <stdio.h>
#include <stdpb.h>

main() {

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

   exit(EXIT_SUCCESS);
}

如果上述法典得到编纂和执行,则会产生以下结果:

Value of quotient : 4
Advertisements