Un'altra importante caratteristica del C, è che dispone di una serie di strumenti per riportare, al programmatore, gli errori commessi durante lo sviluppo. Quando prenderete dimestichezza con la programmazione capirete quanto sia importante avere degli strumenti per il debug, visto che buona parte dello sviluppo di un programma risiede proprio nella correzione degli errori; per poter utilizzare queste funzione è bene includere, oltre alla <stdio.h>, anche le librerie <stdlib.h> e <errno.h>. Una delle funzioni maggiormente utilizzate per questo scopo è la perror(), usata insieme alla errno; la struttura della funzione è la seguente:
void perror(const char *messaggio);
La perror() produce un messaggio a video descrivendo l'ultimo errore riscontrato e ritorna ad errno durante una chiamata ad una funzione di sistema o di libreria.
Errno è una variabile di sistema speciale che viene settata se una chiamata di sistema non esegue correttamente i propri compiti; per essere usata in un programma deve essere dichiarata come extern int errno;, a quel punto può essere manipolata attraverso gli strumenti messi a disposizione dal C, altrimenti ritorna l'ultimo valore ritornato da una funzione di sistema o di libreria. La funzione exit(), invece, si presenta con la seguente struttura:
void exit(int stato);
e serve essenzialmente per terminare l'esecuzione di un programma e ritornare il valore "stato" al sistema operativo, che può assumere essenzialmente questi due valori:
EXIT_SUCCESS - nel caso in cui il programma termini senza problemi;
EXIT_FAILURE - nel caso in cui il programma termini con errori.
ESEMPIO PRATICO (Visualizza il sorgente completo)
Il programma utilizza le funzioni di lettura e scrittura su file per leggere e salvare il file "rubrica.txt". La particolarità
del programma è che salva in formato CSV (Comma Separated Value), formato che permette a programmi di posta come Outlook o
Mozilla di importare i dati senza problemi.
Nota particolare va a "getchar", utilizzata per scrivere una funzioncina che permette all'utente di
leggere i dati una schermata per volta; grazie a getchar si può continuare l'esecuzione premendo invio.