Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

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

  1. C Manipulação de Arquivos
  2. Manipulação de Exceções Java
  3. Compreendendo a taxa de erro do código ADC
  4. Armazenamento e manuseio da correia
  5. Manipulação de Arquivos em C#:Operações de E/S [Exemplos]
  6. Manipulação de sinal C++
  7. C# - Tratamento de Exceções
  8. Python - Tratamento de Exceções
  9. Noções básicas de segurança de manuseio de materiais
  10. O que é manuseio de materiais?