Latest web development tutorials

C Gestion des erreurs

Langage C ne fournit pas un soutien direct à la gestion des erreurs, mais comme un langage de programmation de systèmes, elle renvoie la valeur de la forme vous permet d'accéder aux données sous-jacentes. Quand une erreur survient, la plupart de l'appel de fonction UNIX ou C renvoie 1 ou NULL, un code d'erreur sera également définirerrno, ce code d'erreur est une variable globale, il a exprimé au cours de l'erreur d'appel de fonction produite.Vous pouvez trouver une variété de codes d'erreur <error.h> fichier d'en-tête.

Par conséquent, les programmeurs C peuvent renvoyer des valeurs en vérifiant ce qui les mesures appropriées et ensuite prendre des décisions basées sur la valeur de retour. Les développeurs doivent à l'initialisation du programme, l'errno mis à 0, ce qui est une bonne pratique de programmation. Une valeur de 0 indique que le programme sans erreurs.

errno, perror () et strerror ()

Langage C fournitperror () et la fonction strerror ()pour afficher un message de texte associé auerrno.

  • fonctionperror () pour montrer votre passe sa chaîne, suivi de deux points, un espace et la représentation textuelle de la valeur errno actuelle.
  • strerror () renvoie un pointeur sur la valeur actuelle de la représentation de texte errno.

Nous allons simuler un faux cas, la tentative d'ouvrir un fichier qui n'existe pas. Vous pouvez utiliser plusieurs moyens pour émettre un message d'erreur, ici, nous utilisons la fonction pour démontrer l'utilisation. Une autre chose à noter, vous devez utiliser le flux de fichier de sortiestderr à toutes les erreurs.

#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, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: No such file or directory

Division par zéro erreur

Lors de la division, le diviseur est zéro si pas vérifié, se traduira par une erreur d'exécution.

Pour éviter cela, le code suivant avant de prendre la division va d'abord vérifier le diviseur est égal à zéro:

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

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

除数为 0 退出运行...

état de sortie du programme

Dans des circonstances normales, la mise en œuvre réussie du programme après un temps de fonctionnement normal se terminera avec un EXIT_SUCCESS de valeur. Ici, EXIT_SUCCESS macro, qui est défini comme 0.

S'il y a une erreur dans le programme, lorsque vous quittez le programme, va porter la valeur d'état EXIT_FAILURE, il est défini comme -1. Par conséquent, la procédure ci-dessus peut être écrite comme suit:

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

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

quotient 变量的值为 : 4