Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

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

Язык С не обеспечивает прямую поддержку обработки ошибок, но как язык программирования системы, она возвращает значение формы позволяет получить доступ к исходных данных. При возникновении ошибки, большая часть вызова функции UNIX или C возвращает 1 или NULL, код ошибки будет также установитьERRNO, этот код ошибки является глобальной переменной, это выражается во ошибки вызова функции произошло.Вы можете найти различные коды ошибок <error.h> файл заголовка.

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

ERRNO, PError () и strerror ()

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

  • ФункцияPError () , чтобы показать пропуск его строку, затем двоеточие, пробел и текстовое представление текущего значения ERRNO.
  • 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, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

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

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: 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, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

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

除数为 0 退出运行...

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

При нормальных обстоятельствах, успешная реализация программы после нормального времени работы завершится со значением 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, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

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

quotient 变量的值为 : 4