C Обработка ошибок
C не обеспечивает прямой поддержки обработки ошибок, но как язык системного программирования он позволяет получать доступ к нижележащим данным в виде возвращаемых значений. При возникновении ошибки большинство вызовов функций C или UNIX возвращают 1 или NULL, и одновременно устанавливается код ошибки.errno, этот код ошибки — глобальная переменная, указывающая, что во время вызова функции произошла ошибка. Различные коды ошибок можно найти в заголовочном файле errno.h.
Следовательно, программисты на C могут проверить возвращаемое значение и затем решить, какие соответствующие действия предпринять на его основе. Разработчикам следует устанавливать errno в 0 во время инициализации программы, что является хорошей практикой программирования. Значение 0 указывает, что в программе нет ошибки.
errno, perror() и strerror()
Язык C предоставляетperror()иstrerror()функции для отображенияerrnoсвязанные текстовые сообщения.
- perror()Функция отображает строку, которую вы ей передаёте, за которой следуют двоеточие, пробел и текстовое представление текущего значения errno.
- strerror()Функция возвращает указатель, который указывает на текстовое представление текущего значения errno.
Давайте смоделируем состояние ошибки, попытавшись открыть файл, которого не существует. Вы можете использовать различные способы вывода сообщений об ошибках; здесь мы используем функции для демонстрации использования. Также следует отметить, что вы должны использоватьstderrфайловые потоки для вывода всех ошибок.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
错误号: 2 通过 perror 输出错误: No such file or directory 打开文件错误: No such file or directory
Ошибки деления на ноль
При выполнении деления, если не проверять, равен ли делитель нулю, это приведёт к ошибке времени выполнения.
Чтобы избежать этой ситуации, следующий код проверяет, равен ли делитель нулю, перед выполнением операции деления:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
除数为 0 退出运行...
Статус завершения программы
В общем случае, когда программа успешно выполняет операцию и завершается нормально, она возвращает значение EXIT_SUCCESS. Здесь EXIT_SUCCESS — это макрос, определённый как 0.
Если в программе возникает ошибка, при завершении программы она возвращает значение статуса EXIT_FAILURE, которое определено как -1. Таким образом, приведённую выше программу можно записать так:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
quotient 变量的值为 : 4Другие расширения