In generale, il codice dovrebbe gestire condizioni eccezionali dovunque sia appropriato. Sì, questa è una dichiarazione vaga.
Nei linguaggi di livello superiore con la gestione delle eccezioni del software, questo è spesso indicato come "cattura l'eccezione nel metodo in cui puoi effettivamente fare qualcosa al riguardo". Se si è verificato un errore nel file, è possibile che si lasci sfuggire lo stack al codice dell'interfaccia utente che può effettivamente dire all'utente "il file non è riuscito a salvare su disco". Il meccanismo di eccezione in pratica inghiotte "ogni piccolo errore" e lo gestisce implicitamente nel punto appropriato.
In C, non hai quel lusso. Esistono alcuni modi per gestire gli errori, alcuni dei quali sono funzionalità di linguaggio / libreria, alcune delle quali sono pratiche di codifica.
Is it a good practice to just ignore certain errors, or is there a
better way to handle all the errors?
Ignora determinati errori? Può essere. Ad esempio, è ragionevole presumere che la scrittura sullo standard output non fallirà. Se fallisce, come lo diresti comunque all'utente? Sì, è una buona idea ignorare determinati errori o il codice in modo difensivo per prevenirli. Ad esempio, controlla zero prima di dividerlo.
Ci sono modi per gestire tutti gli errori, o almeno la maggior parte:
-
È possibile utilizzare salti, simili a gotos, per la gestione degli errori . Pur trattandosi di un problema conflittuale tra i professionisti del software, vi sono per loro validi usi, specialmente nel codice integrato e critico per le prestazioni (ad esempio il kernel Linux).
-
Cascading if
s:
if (!<something>) {
printf("oh no 1!");
return;
}
if (!<something else>) {
printf("oh no 2!");
return;
}
-
Verifica la prima condizione, ad es. aprire o creare un file, quindi assumere le operazioni successive.
Il codice robusto è buono e si dovrebbe controllare e gestire gli errori. Il metodo migliore per il tuo codice dipende da cosa fa il codice, da quanto è critico un errore, ecc. E solo tu puoi veramente rispondere. Tuttavia, questi metodi sono testati in battaglia e utilizzati in vari progetti open source in cui è possibile dare un'occhiata per vedere come il codice reale verifica la presenza di errori.