TLDR; casi nunca debes ignorar los errores.
El lenguaje C carece de una buena característica de manejo de errores que permita a cada desarrollador de bibliotecas implementar sus propias soluciones. Los lenguajes más modernos tienen excepciones incorporadas que hacen que este problema en particular sea mucho más fácil de manejar.
Pero cuando estás atrapado con C no tienes tales ventajas. Desafortunadamente, simplemente tendrá que pagar el precio cada vez que llame a una función que existe una posibilidad remota de falla. O bien, sufrirá consecuencias mucho peores, como sobrescribir los datos en la memoria sin querer. Por lo tanto, como regla general, debe verificar los errores siempre.
Si no verifica el regreso fprintf
, es muy probable que deje un error que, en el mejor de los casos, no hará lo que el usuario espera y, en el peor de los casos, explotará todo durante el vuelo. No hay excusa para debilitarte de esa manera.
Sin embargo, como desarrollador de C, también es su trabajo hacer que el código sea fácil de mantener. Por lo tanto, a veces puede ignorar los errores de manera segura en aras de la claridad si (y solo si) no representan una amenaza para el comportamiento general de la aplicación. .
Es el mismo problema que hacer esto:
try
{
run();
} catch (Exception) {
// comments expected here!!!
}
Si ves que sin buenos comentarios dentro del bloque catch vacío, este es ciertamente un problema. No hay razón para pensar que una llamada malloc()
se ejecutará con éxito el 100% del tiempo.
try
declaración, por lo que no tiene que verificar cada llamada u operación. (También tenga en cuenta que algunos idiomas son mejores que otros para detectar errores simples como la anulación de referencia o el índice de matriz fuera de los límites).errno
! En caso de que no esté familiarizado, si bien es cierto que "casi todas las funciones de la biblioteca C devolverán 0 o -1 oNULL
cuando haya un error", también establecen laerrno
variable global , a la que puede acceder mediante el uso#include <errno.h>
y luego simplemente leyendo el valor deerrno
. Entonces, por ejemplo, siopen
(2) regresa-1
, es posible que desee verificar sierrno == EACCES
, lo que indicaría un error de permisos, oENOENT
, lo que indicaría que el archivo solicitado no existe.try
/catch
, aunque podría simularlo con saltos.