Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Manejo de Errores en C: Mejores Prácticas y Técnicas

En sí, la programación en C no proporciona soporte directo para el manejo de errores, pero al ser un lenguaje de programación de sistemas, ofrece acceso a bajo nivel mediante valores de retorno. La mayoría de las funciones de C o Unix devuelven -1 o NULL en caso de error y establecen un código de error errno. Esta variable global indica que ocurrió un error durante una llamada a función. Puede encontrar varios códigos de error definidos en el archivo de cabecera <error.h>.

Así, un programador en C puede comprobar los valores devueltos y tomar la acción apropiada según el valor de retorno. Es una buena práctica establecer errno a 0 al iniciar el programa. Un valor de 0 indica que no hay error.

errno, perror() y strerror()

El lenguaje C proporciona las funciones perror() y strerror() para mostrar el mensaje de texto asociado a errno.

Intentemos simular una condición de error e intentar abrir un archivo que no existe. Aquí uso ambas funciones para mostrar su uso, pero puede usar una o más formas de imprimir sus errores. Segundo punto importante: debe usar el flujo de archivo stderr para emitir 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;
}

Al compilar y ejecutar, produce:

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

Errores de División por Cero

Es un problema común que al dividir, los programadores no comprueben si el divisor es cero, lo que crea un error en tiempo de ejecución.

El siguiente código lo soluciona comprobando si el divisor es cero antes de dividir:

#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);
}

Al compilar y ejecutar, produce:

Division by zero! Exiting...

Estado de Salida del Programa

Es práctica común salir con un valor de EXIT_SUCCESS en caso de operación exitosa. EXIT_SUCCESS es un macro definido como 0.

Si hay una condición de error y sale, debe salir con estado EXIT_FAILURE, definido como -1. Reescribamos el programa anterior así:

#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);
}

Al compilar y ejecutar, produce:

Value of quotient : 4

Lenguaje C

  1. Mejores prácticas para almacenar y manipular correas de transmisión de potencia
  2. Comprendiendo la manipulación de materiales: Conceptos clave y mejores prácticas
  3. Cuatro Tipos Clave de Equipos de Manipulación de Materiales para Operaciones Eficientes
  4. Dominando la seguridad en manipulación de materiales: Mejores prácticas para operaciones eficientes y sin riesgos
  5. Dominando las tasas de error de código en ADC: Lo que necesita saber
  6. Manejo de archivos en C: Dominando E/S con fopen, fprintf, fread y fseek
  7. Operaciones con Archivos en C# – Guía Práctica
  8. Dominar el manejo de señales en C++: Gestión segura de interrupciones y terminación limpia del programa
  9. Manejo de excepciones en C#: Estrategias y mejores prácticas
  10. Manejo de Excepciones en Python: Guía Completa y Práctica
  11. Dominando el manejo de excepciones en Java: Try, Catch, Finally, Throw y Throws explicados