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?