AnyCompiler

Manejo de Errores en C

C no tiene try, catch, ni throw — no hay ningún mecanismo de exception en absoluto. La convención estándar en su lugar es que una función devuelva un código de estado (comúnmente 0 para éxito, distinto de cero para un tipo específico de falla) y, cuando hay un valor real que producir, lo escriba a través de un parámetro output pointer en lugar de devolverlo directamente.

#include <stdio.h>

int safeDivide(int a, int b, int *result) {
    if (b == 0) {
        return -1;
    }
    *result = a / b;
    return 0;
}

int main() {
    int result;
    if (safeDivide(10, 0, &result) == 0) {
        printf("%d\n", result);
    } else {
        printf("Error: division by zero\n");
    }
    return 0;
}
Output
Error: division by zero

Esa es la base de C: sin garbage collector, sin classes, sin exceptions — solo functions, structs, pointers, y gestión manual de memoria, con el compilador verificando mucho menos en tu nombre que cualquier otro lenguaje de este sitio. Cada abstracción de más alto nivel que ofrecen los demás cursos aquí — garbage collection, RAII, borrow checking, exceptions — existe específicamente para automatizar una parte de lo que acabas de hacer a mano. Desde aquí, el mejor siguiente paso es la práctica: elige un programa pequeño, y presta mucha atención a cada malloc que escribas, ya que en C, free siempre es tu trabajo.

Practice exercise

Escribe safeDivide(int a, int b, int *result) que devuelva -1 y deje *result sin tocar si b es 0, de lo contrario almacene a / b en *result y devuelva 0. Llámala con (10, 0, &result) e imprime "Error: division by zero" si falla.

← const y staticMás lecciones próximamente