C - Manejo de errores
Como tal, la programación en C no brinda soporte directo para el manejo de errores, pero al ser un lenguaje de programación del sistema, le brinda acceso a un nivel inferior en forma de valores de retorno. La mayoría de las llamadas a funciones de C o incluso Unix devuelven -1 o NULL en caso de cualquier error y establecen un código de error errno . Se establece como una variable global e indica que ocurrió un error durante cualquier llamada de función. Puede encontrar varios códigos de error definidos en el archivo de encabezado
Entonces, un programador de C puede verificar los valores devueltos y puede tomar las medidas apropiadas según el valor devuelto. Es una buena práctica establecer errno en 0 al momento de inicializar un programa. Un valor de 0 indica que no hay ningún error en el programa.
errno, perror(). y estrerror()
El lenguaje de programación C proporciona perror() y strerror() funciones que se pueden utilizar para mostrar el mensaje de texto asociado con errno .
-
El error() muestra la cadena que le pasa, seguida de dos puntos, un espacio y luego la representación textual del valor actual de errno.
-
El estrero() función, que devuelve un puntero a la representación textual del valor errno actual.
Intentemos simular una condición de error e intentemos abrir un archivo que no existe. Aquí estoy usando ambas funciones para mostrar el uso, pero puede usar una o más formas de imprimir sus errores. El segundo punto importante a tener en cuenta es que debe usar stderr secuencia de archivos para mostrar todos los errores.
#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE * pf; int errnum; pf = fopen ("unexist.txt", "rb"); if (pf == NULL) { errnum = errno; fprintf(stderr, "Value of errno: %d\n", errno); perror("Error printed by perror"); fprintf(stderr, "Error opening file: %s\n", strerror( errnum )); } else { fclose (pf); } return 0; }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Value of errno: 2 Error printed by perror: No such file or directory Error opening file: No such file or directory
Dividir por cero errores
Es un problema común que al momento de dividir cualquier número, los programadores no verifican si un divisor es cero y finalmente genera un error de tiempo de ejecución.
El siguiente código soluciona esto comprobando si el divisor es cero antes de dividir −
Demostración en vivo#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 0; int quotient; if( divisor == 0){ fprintf(stderr, "Division by zero! Exiting...\n"); exit(-1); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d\n", quotient ); exit(0); }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Division by zero! Exiting...
Estado de salida del programa
Es una práctica común salir con un valor de EXIT_SUCCESS en caso de que el programa salga después de una operación exitosa. Aquí, EXIT_SUCCESS es una macro y se define como 0.
Si tiene una condición de error en su programa y está saliendo, debe salir con un estado EXIT_FAILURE que se define como -1. Así que escribamos el programa anterior de la siguiente manera −
Demostración en vivo#include <stdio.h> #include <stdlib.h> main() { int dividend = 20; int divisor = 5; int quotient; if( divisor == 0) { fprintf(stderr, "Division by zero! Exiting...\n"); exit(EXIT_FAILURE); } quotient = dividend / divisor; fprintf(stderr, "Value of quotient : %d\n", quotient ); exit(EXIT_SUCCESS); }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Value of quotient : 4
Lenguaje C
- Manejo de archivos C
- Manejo de excepciones de Java
- Comprender la tasa de error del código ADC
- Almacenamiento y manipulación de cinturones
- Manejo de archivos en C#:Operaciones de E/S [Ejemplos]
- 4 tipos de equipos de manipulación de materiales
- Manejo de señales C++
- C# - Manejo de excepciones
- Python - Manejo de excepciones
- Conceptos básicos de seguridad en el manejo de materiales
- ¿Qué es el manejo de materiales?