C - Tratamento de erros
Como tal, a programação C não fornece suporte direto para tratamento de erros, mas sendo uma linguagem de programação do sistema, fornece acesso em nível inferior na forma de valores de retorno. A maioria das chamadas de função C ou mesmo Unix retorna -1 ou NULL em caso de erro e define um código de erro errno . Ele é definido como uma variável global e indica que ocorreu um erro durante qualquer chamada de função. Você pode encontrar vários códigos de erro definidos no arquivo de cabeçalho
Assim, um programador C pode verificar os valores retornados e tomar as medidas apropriadas dependendo do valor retornado. É uma boa prática definir errno como 0 no momento da inicialização de um programa. Um valor de 0 indica que não há erro no programa.
errno, perror(). e strerror()
A linguagem de programação C fornece perror() e strerror() funções que podem ser usadas para exibir a mensagem de texto associada a errno .
-
O perror() A função exibe a string que você passa para ela, seguida por dois pontos, um espaço e, em seguida, a representação textual do valor errno atual.
-
O strerror() função, que retorna um ponteiro para a representação textual do valor errno atual.
Vamos tentar simular uma condição de erro e tentar abrir um arquivo que não existe. Aqui estou usando as duas funções para mostrar o uso, mas você pode usar uma ou mais formas de imprimir seus erros. O segundo ponto importante a ser observado é que você deve usar stderr fluxo de arquivo para gerar todos os erros.
#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; }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Value of errno: 2 Error printed by perror: No such file or directory Error opening file: No such file or directory
Dividir por zero erros
É um problema comum que na hora de dividir qualquer número, os programadores não verificam se um divisor é zero e, por fim, cria um erro de execução.
O código abaixo corrige isso verificando se o divisor é zero antes de dividir -
Demonstração ao 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); }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Division by zero! Exiting...
Status de saída do programa
É uma prática comum sair com um valor de EXIT_SUCCESS no caso de o programa sair após uma operação bem-sucedida. Aqui, EXIT_SUCCESS é uma macro e é definida como 0.
Se você tiver uma condição de erro em seu programa e estiver saindo, você deve sair com um status EXIT_FAILURE que é definido como -1. Então vamos escrever o programa acima da seguinte forma -
Demonstração ao 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); }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Value of quotient : 4
Linguagem C
- C Manipulação de Arquivos
- Manipulação de Exceções Java
- Compreendendo a taxa de erro do código ADC
- Armazenamento e manuseio da correia
- Manipulação de Arquivos em C#:Operações de E/S [Exemplos]
- Manipulação de sinal C++
- C# - Tratamento de Exceções
- Python - Tratamento de Exceções
- Noções básicas de segurança de manuseio de materiais
- O que é manuseio de materiais?