C Gestion des erreurs

C ne fournit pas de prise en charge directe de la gestion des erreurs, mais en tant que langage de programmation système, il vous permet d'accéder aux données sous-jacentes sous la forme de valeurs de retour. Lorsqu'une erreur se produit, la plupart des appels de fonctions C ou UNIX renvoient 1 ou NULL, et un code d'erreur est défini en même temps.errno, ce code d'erreur est une variable globale indiquant qu'une erreur s'est produite lors de l'appel de fonction. Vous pouvez trouver divers codes d'erreur dans le fichier d'en-tête errno.h.

Par conséquent, les programmeurs C peuvent vérifier la valeur de retour, puis décider quelle action appropriée entreprendre en fonction de celle-ci. Les développeurs doivent définir errno à 0 lors de l'initialisation du programme, ce qui est une bonne pratique de programmation. Une valeur de 0 indique qu'il n'y a pas d'erreur dans le programme.

errno, perror() et strerror()

Le langage C fournit les fonctionsperror()etstrerror()pour affichererrnomessages textuels associés.

  • perror()La fonction affiche la chaîne que vous lui passez, suivie d'un deux-points, d'un espace et de la représentation textuelle de la valeur actuelle de errno.
  • strerror()La fonction renvoie un pointeur, qui pointe vers la représentation textuelle de la valeur actuelle de errno.

Simulons une condition d'erreur en essayant d'ouvrir un fichier qui n'existe pas. Vous pouvez utiliser diverses façons d'afficher les messages d'erreur ; ici, nous utilisons des fonctions pour démontrer l'utilisation. De plus, une chose à noter est que vous devez utiliserstderrflux de fichiers pour afficher toutes les erreurs.

Exemple

#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, "Numéro d'erreur : %d\n", errno); perror("Afficher l'erreur via perror"); fprintf(stderr, "Erreur d'ouverture du fichier : %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

Erreurs de division par zéro

Lors d'une division, si vous ne vérifiez pas si le diviseur est zéro, cela provoquera une erreur d'exécution.

Pour éviter que cette situation ne se produise, le code suivant vérifie si le diviseur est zéro avant d'effectuer l'opération de division :

Exemple

#include <stdio.h> #include <stdlib.h> int main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "Division par zéro, sortie...\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "La valeur de la variable quotient est : %d\n", quotient ); exit(0); }

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

除数为 0 退出运行...

Statut de sortie du programme

En général, lorsqu'un programme exécute une opération avec succès et se termine normalement, il porte la valeur EXIT_SUCCESS. Ici, EXIT_SUCCESS est une macro définie comme 0.

S'il y a une condition d'erreur dans le programme, lorsque vous quittez le programme, il portera la valeur de statut EXIT_FAILURE, qui est définie comme -1. Ainsi, le programme ci-dessus peut être écrit comme :

Exemple

#include <stdio.h> #include <stdlib.h> int main() { int dividend = 20; int divisor = 5; int quotient; if( divisor == 0){ fprintf(stderr, "Division par zéro, sortie...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "La valeur de la variable quotient est : %d\n", quotient ); exit(EXIT_SUCCESS); }

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

quotient 变量的值为 : 4
autres extensions