Estratégias de Tratamento de Erros
Fundamentos de Tratamento de Erros
Mecanismos de Relatório de Erros
typedef enum {
SEM_ERRO = 0,
ERRO_ALOCACAO_MEMORIA = -1,
ERRO_ENTRADA_INVALIDA = -2,
ERRO_OPERACAO_ARQUIVO = -3
} ErrorCode;
Técnicas de Detecção de Erros
Verificação de Valores de Retorno
ErrorCode process_data(int *data, size_t size) {
if (data == NULL || size == 0) {
return ERRO_ENTRADA_INVALIDA;
}
int *buffer = malloc(size * sizeof(int));
if (buffer == NULL) {
return ERRO_ALOCACAO_MEMORIA;
}
// Processar dados
free(buffer);
return SEM_ERRO;
}
Fluxo de Trabalho de Tratamento de Erros
graph TD
A[Chamada de Função] --> B{Erro Detetado?}
B -->|Sim| C[Registar Erro]
B -->|Não| D[Continuar Execução]
C --> E[Recuperação de Erro]
E --> F[Retornar Código de Erro]
Estratégias de Tratamento de Erros
Registo de Erros
void log_error(ErrorCode error, const char *message) {
FILE *log_file = fopen("error_log.txt", "a");
if (log_file != NULL) {
fprintf(log_file, "Código de Erro: %d, Mensagem: %s\n", error, message);
fclose(log_file);
}
}
Padrões de Tratamento de Erros
| Padrão |
Descrição |
Vantagens |
| Códigos de Retorno |
Indicação explícita de erro |
Simples, previsível |
| Callbacks de Erro |
Tratamento de erro personalizado |
Resposta flexível |
| Estado Global de Erro |
Rastreio centralizado de erros |
Gestão consistente de erros |
Tratamento de Erros Avançado
Gestão Estruturada de Erros
typedef struct {
ErrorCode code;
char message[256];
} ErrorContext;
ErrorContext global_error = {SEM_ERRO, ""};
void set_error(ErrorCode code, const char *message) {
global_error.code = code;
strncpy(global_error.message, message, sizeof(global_error.message) - 1);
}
Boas Práticas Recomendadas pela LabEx
- Utilize códigos de erro abrangentes.
- Implemente registo detalhado de erros.
- Crie mecanismos robustos de recuperação de erros.
- Minimize vazamentos de recursos durante o tratamento de erros.
Boas Práticas de Tratamento de Erros
- Verifique sempre os valores de retorno.
- Forneça mensagens de erro significativas.
- Implemente recuperação de erros graciosa.
- Utilize mecanismos de relatório de erros consistentes.
Desafios Comuns no Tratamento de Erros
- Tratamento de erros inesperados.
- Prevenção de vazamentos de recursos.
- Manutenção da estabilidade do programa.
- Fornecimento de informações úteis para depuração.
Implementando estas estratégias de tratamento de erros, os desenvolvedores podem criar programas C mais resilientes e manuteníveis.