C - Traitement des erreurs

En tant que tel, la programmation C ne fournit pas de support direct pour la gestion des erreurs, mais étant un langage de programmation système, elle vous permet d'accéder à un niveau inférieur sous la forme de valeurs de retour. La plupart des appels de fonction C ou même Unix renvoient -1 ou NULL en cas d'erreur et définissent un code d'erreurerrno. Il est défini comme une variable globale et indique qu'une erreur s'est produite lors de tout appel de fonction. Vous pouvez trouver divers codes d'erreur définis dans le fichier d'en-tête <error.h>.

Ainsi, un programmeur C peut vérifier les valeurs renvoyées et peut prendre les mesures appropriées en fonction de la valeur de retour. Il est recommandé de définir errno sur 0 au moment de l'initialisation d'un programme. Une valeur de 0 indique qu'il n'y a pas d'erreur dans le programme.

errno, perror (). et strerror ()

Le langage de programmation C fournit perror() et strerror() fonctions qui peuvent être utilisées pour afficher le message texte associé à errno.

  • le perror() La fonction affiche la chaîne que vous lui passez, suivie de deux points, d'un espace, puis de la représentation textuelle de la valeur errno actuelle.

  • le strerror() , qui renvoie un pointeur vers la représentation textuelle de la valeur courante de l'erreur.

Essayons de simuler une condition d'erreur et essayons d'ouvrir un fichier qui n'existe pas. Ici, j'utilise les deux fonctions pour montrer l'utilisation, mais vous pouvez utiliser une ou plusieurs façons d'imprimer vos erreurs. Le deuxième point important à noter est que vous devez utiliserstderr flux de fichiers pour afficher 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, "Value of errno: %d\n", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
   } else {
   
      fclose (pf);
   }
   
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Diviser par zéro erreur

C'est un problème courant qu'au moment de diviser un nombre, les programmeurs ne vérifient pas si un diviseur est égal à zéro et finalement cela crée une erreur d'exécution.

Le code ci-dessous corrige cela en vérifiant si le diviseur est égal à zéro avant de diviser -

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

main() {

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

   exit(0);
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Division by zero! Exiting...

État de sortie du programme

Il est courant de quitter avec une valeur de EXIT_SUCCESS en cas de sortie du programme après une opération réussie. Ici, EXIT_SUCCESS est une macro et il est défini comme 0.

Si vous avez une condition d'erreur dans votre programme et que vous sortez, vous devez quitter avec un statut EXIT_FAILURE qui est défini comme -1. Alors écrivons le programme ci-dessus comme suit -

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

main() {

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

   exit(EXIT_SUCCESS);
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Value of quotient : 4