Una regola empirica generale quando si utilizza una libreria esterna (che si fa sempre nella programmazione delle applicazioni, almeno utilizzando la libreria C standard in C) è quella di verificare l'eventuale fallimento della maggior parte delle funzioni che si stanno chiamando.
Un tipico esempio semplice è stdio (3) e <stdlib.h>
funzioni. Certamente dovresti sempre controllare quando usi fopen (3) (o popen(3) ) e malloc (3) . Quindi non scrivere codice
/// BAD SINCE NO CHECKS
FILE* fil = fopen("outfile.txt", "w");
fprintf (fil, "something, e.g. one is %d\n", 1);
Ma almeno:
FILE* fil = fopen("outfile.txt", "w");
if (!fil) { perror("fopen outfile.txt"); exit(EXIT_FAILURE); };
fprintf (fil, "something, e.g. one is %d\n", 1);
e allo stesso modo codifica semplicemente
/// BAD SINCE NO CHECKS
struct somestruct_st *ptr = malloc(sizeof(struct somestruct_st));
ptr->somefield = 2;
è sbagliato, dovresti almeno:
struct somestruct_st *ptr = malloc(sizeof(struct somestruct_st));
if (!ptr) { perror("malloc somestruct_st"); exit(EXIT_FAILURE); };
ptr->somefield = 2;
Ci sono alcune funzioni che potresti testare ma spesso no. Un tipico esempio è fclose (3) . Se sei molto attento, dovresti testarlo, ma di solito no.
Si noti che i fallimenti dei casi d'angolo di test (come sopra) possono essere difficili. Su Linux, riducendo le quote e i limiti del disco (con setrlimit (2) ...) potrebbe aiutarti, dal momento che potresti quasi forzare alcuni di questi errori.
Si noti che il software server (che viene eseguito molti giorni) dovrebbe prestare maggiore attenzione al rilevamento e alla segnalazione di errori rispetto a un semplice strumento della riga di comando.
Per i software embedded critici (come il pacemaker cardiaco, l'aeromobile per le compagnie aeree) è essenziale controllare tutti i casi. l'analisi statica del programma può aiutare (ma non è un proiettile d'argento).
Inoltre, studia il codice sorgente di (e contribuisci a) software gratuito esistente . Ti insegnerà molto. E impara diversi linguaggi di programmazione (certamente Ocaml o Haskell, Scheme o CommonLisp ti insegneranno molto!).
Prendi anche il tempo di leggere la documentazione delle funzioni o delle librerie che stai utilizzando.