En general, el código debe tratar con condiciones excepcionales siempre que sea apropiado. Sí, esta es una declaración vaga.
En los idiomas de nivel superior con manejo de excepciones de software, esto se suele decir como "detectar la excepción en el método en el que realmente se puede hacer algo al respecto". Si se produjo un error en el archivo, tal vez deje que se acumule la pila en el código de la interfaz de usuario que puede decirle al usuario que "su archivo no se guardó en el disco". El mecanismo de excepción efectivamente absorbe "cada pequeño error" y lo maneja de manera implícita en el lugar apropiado.
En C, no tienes ese lujo. Hay algunas formas de manejar los errores, algunas de las cuales son características de lenguaje / biblioteca, algunas de las cuales son prácticas de codificación.
¿Es una buena práctica simplemente ignorar ciertos errores, o hay una
¿Mejor manera de manejar todos los errores?
¿Ignorar ciertos errores? Tal vez. Por ejemplo, es razonable suponer que la escritura en la salida estándar no fallará. Si falla, ¿cómo le dirías al usuario, de todos modos? Sí, es una buena idea ignorar ciertos errores, o codificar defensivamente para prevenirlos. Por ejemplo, compruebe si hay cero antes de dividir.
Hay formas de manejar todos los errores, o al menos la mayoría de ellos:
-
Puede usar saltos, similares a gotos, para el manejo de errores . Si bien es un tema polémico entre los profesionales de software, existen usos válidos para ellos, especialmente en el código incrustado y de rendimiento crítico (por ejemplo, kernel de Linux).
-
En cascada if
s:
if (!<something>) {
printf("oh no 1!");
return;
}
if (!<something else>) {
printf("oh no 2!");
return;
}
-
Probar la primera condición, por ejemplo, abriendo o creando un archivo, luego asuma que las operaciones subsiguientes tienen éxito.
El código robusto es bueno, y uno debe verificar y manejar los errores. El método que mejor se adapte a su código depende de lo que haga el código, qué tan crítico es un fallo, etc., y solo usted puede responderlo de verdad. Sin embargo, estos métodos se prueban en el campo de la batalla y se usan en varios proyectos de código abierto, donde puedes echar un vistazo para ver cómo el código real comprueba los errores.