C - Traitement des erreurs
En tant que telle, 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'erreur errno . 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
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. C'est une bonne pratique de mettre errno à 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.
errnon, erreur(). et strerreur()
Le langage de programmation C fournit perror() et strerreur() fonctions permettant d'afficher le message texte associé à errno .
-
La erreur() affiche la chaîne que vous lui transmettez, suivie de deux-points, d'un espace, puis de la représentation textuelle de la valeur errno actuelle.
-
L'erreur() fonction, qui renvoie un pointeur vers la représentation textuelle de la valeur errno actuelle.
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 utiliser stderr 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 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 −
Démo en direct#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 programme sortant après une opération réussie. Ici, EXIT_SUCCESS est une macro et elle est définie 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. Écrivons donc le programme ci-dessus comme suit −
Démo en direct#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
Langue C