Gestion des erreurs C


Le langage C ne fournit pas de support direct pour 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 forme de valeurs de retour. Lorsqu'une erreur se produit, la plupart des appels de fonction C ou UNIX renvoient 1 ou NULL et définissent un code d'erreur errno, qui est une variable globale indiquant qu'une erreur s'est produite lors de l'appel de fonction. Vous pouvez trouver différents codes d'erreur dans le fichier d'en-tête <error.h>

Ainsi, le programmeur C peut vérifier la valeur de retour et décider quelle action appropriée entreprendre en fonction de la valeur de retour. Les développeurs doivent définir errno sur 0 lors de l'initialisation du programme, ce qui constitue une bonne pratique de programmation. Une valeur de 0 indique qu'il n'y a aucune erreur dans le programme.

errno, perror() et strerror()

Le langage C fournit les fonctions perror() et strerror() pour l'affichage du texte messages liés à errno. La fonction

  • perror() affiche la chaîne que vous lui transmettez, suivie de deux points, d'un espace et d'une représentation textuelle de la valeur du numéro d'erreur actuel. La fonction

  • strerror() renvoie un pointeur pointant vers la représentation textuelle de la valeur du numéro d'erreur actuel.

Simulons une situation d'erreur en essayant d'ouvrir un fichier qui n'existe pas. Il existe de nombreuses façons d'afficher des messages d'erreur. Ici, nous utilisons des fonctions pour démontrer leur utilisation. Une autre chose à noter est que vous devez utiliser le flux de fichiers stderr 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, "错误号: %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 l'opération de division, si vous ne cochez pas Si le diviseur est zéro, une erreur d'exécution se produira.

Pour éviter que cela ne se produise, le code suivant vérifiera si le diviseur est nul avant d'effectuer l'opération de division :

#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 sera compilé et exécuté, il produira le résultat suivant :

除数为 0 退出运行...

Statut de sortie du programme

Normalement, lorsque le programme exécute avec succès une opération et se termine normalement, il aura la valeur EXIT_SUCCESS. Ici, EXIT_SUCCESS est la macro et elle est définie comme 0.

S'il y a une condition d'erreur dans le programme, lorsque vous quitterez le programme, ce sera avec la valeur d'état EXIT_FAILURE, qui est définie comme -1. Ainsi, le programme ci-dessus peut être écrit comme :

#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 produira les résultats suivants :

quotient 变量的值为 : 4