AnyCompiler

Tratamento de Erros em C

C não tem try, catch, ou throw — não há nenhum mecanismo de exception. A convenção padrão em vez disso é que uma function retorne um código de status (comumente 0 para sucesso, diferente de zero para um tipo específico de falha) e, quando há um valor real para produzir, escreva-o através de um parâmetro output pointer em vez de retorná-lo diretamente.

#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

Essa é a base do C: sem garbage collector, sem classes, sem exceptions — apenas functions, structs, pointers, e gerenciamento manual de memória, com o compilador verificando muito menos em seu nome do que qualquer outra linguagem deste site. Toda abstração de nível mais alto que os outros cursos aqui oferecem — garbage collection, RAII, borrow checking, exceptions — existe especificamente para automatizar uma parte do que você acabou de fazer manualmente. A partir daqui, o melhor próximo passo é a prática: escolha um programa pequeno, e preste muita atenção a cada malloc que você escrever, já que em C, free é sempre o seu trabalho.

Practice exercise

Escreva safeDivide(int a, int b, int *result) que retorne -1 e deixe *result intocado se b for 0, caso contrário armazene a / b em *result e retorne 0. Chame-a com (10, 0, &result) e imprima "Error: division by zero" se falhar.

← const e staticMais lições em breve