Latest web development tutorials

C Gestione degli errori

linguaggio C non fornisce supporto diretto per la gestione degli errori, ma come un linguaggio di programmazione di sistemi, restituisce il valore del modulo permette di accedere ai dati sottostanti. Quando si verifica un errore, la maggior parte della chiamata di funzione UNIX o C restituisce 1 o NULL, un codice di errore sarà anche impostareerrno, questo codice di errore è una variabile globale, ha espresso durante l'errore di chiamata di funzione si è verificato.È possibile trovare una varietà di errore di file di intestazione codici <error.h>.

Pertanto, programmatori C possono restituire valori controllando ciò che l'azione appropriata e poi prendere decisioni sulla base del valore di ritorno. Gli sviluppatori dovrebbero all'inizializzazione del programma, la errno impostato a 0, il che è una buona pratica di programmazione. Il valore 0 indica che il programma senza errori.

errno, perror () e strerror ()

linguaggio C fornisce la funzionestrerror () per visualizzare un messaggio di testo associato al errnoperror ()e.

  • Funzioneperror () per mostrare il pass sua stringa, seguita da due punti, uno spazio e la rappresentazione testuale del valore errno corrente.
  • strerror function ()restituisce un puntatore al valore corrente della rappresentazione del testo errno.

Cerchiamo di simulare un caso falso, il tentativo di aprire un file che non esiste. È possibile utilizzare diversi modi per emettere un messaggio di errore, qui si usa la funzione di dimostrare l'uso. Un'altra cosa da notare, è necessario utilizzare il flusso di file di outputstderr di tutti gli errori.

#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;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

Divisione per zero

Durante la divisione, il divisore è zero se non controllato, si tradurrà in un errore di runtime.

Per evitare che ciò accada, il seguente codice prima di effettuare la divisione sarà per prima cosa controllare il divisore è zero:

#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);
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

除数为 0 退出运行...

stato di uscita del programma

In circostanze normali, il successo dell'attuazione del programma, dopo un tempo di funzionamento normale uscirà con un valore di EXIT_SUCCESS. Qui, EXIT_SUCCESS macro, che è definito come 0.

Se c'è un errore nel programma, quando si chiude il programma, porteranno valore di stato EXIT_FAILURE, è definito come -1. Pertanto, la procedura di cui sopra può essere scritta come:

#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);
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

quotient 变量的值为 : 4