Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

C - Обработка ошибок

Таким образом, программирование на C не обеспечивает прямой поддержки обработки ошибок, но, будучи языком системного программирования, предоставляет вам доступ на более низком уровне в виде возвращаемых значений. Большинство вызовов функций C или даже Unix возвращают -1 или NULL в случае какой-либо ошибки и устанавливают код ошибки errno . Он задается как глобальная переменная и указывает на ошибку, возникшую во время любого вызова функции. Вы можете найти различные коды ошибок, определенные в заголовочном файле .

Таким образом, программист C может проверить возвращаемые значения и предпринять соответствующие действия в зависимости от возвращаемого значения. Хорошей практикой является установка errno в 0 во время инициализации программы. Значение 0 указывает, что в программе нет ошибок.

ошибка, ошибка(). и strerror()

Язык программирования C предоставляет perror() и strerror() функции, которые можно использовать для отображения текстового сообщения, связанного с errno .

Давайте попробуем смоделировать состояние ошибки и попробуем открыть несуществующий файл. Здесь я использую обе функции, чтобы показать использование, но вы можете использовать один или несколько способов вывода своих ошибок. Второй важный момент, который следует отметить, это то, что вы должны использовать stderr файловый поток для вывода всех ошибок.

#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;
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

Делить на ноль ошибок

Распространенной проблемой является то, что во время деления любого числа программисты не проверяют, равен ли делитель нулю, и, наконец, это создает ошибку времени выполнения.

Приведенный ниже код исправляет это, проверяя, равен ли делитель нулю перед делением —

Живая демонстрация
#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);
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Division by zero! Exiting...

Статус выхода из программы

Обычной практикой является выход со значением EXIT_SUCCESS в случае выхода программы после успешной операции. Здесь EXIT_SUCCESS — это макрос, и он определен как 0.

Если у вас есть состояние ошибки в вашей программе, и вы выходите, вы должны выйти со статусом EXIT_FAILURE, который определяется как -1. Итак, давайте напишем приведенную выше программу следующим образом —

Живая демонстрация
#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);
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Value of quotient : 4

Язык C

  1. C Обработка файлов
  2. Обработка исключений Java
  3. Общие сведения о частоте ошибок кода АЦП
  4. Хранение ремня и обращение с ним
  5. Обработка файлов в C#:операции ввода-вывода [примеры]
  6. Обработка сигналов С++
  7. С# — обработка исключений
  8. Python — обработка исключений
  9. Основы безопасности при обращении с материалами
  10. Что такое обработка материалов?