Авторизация
Забыли пароль? Введите ваш е-мейл адрес. Вы получите письмо на почту со ссылкой для восстановления пароля.
После регистрации вы сможете задавать вопросы и писать свои ответы, получая за это бонусы. Все остальные функции на сайте доступны без регистрации.
Вы должны войти или зарегистрироваться, чтобы добавить ответ и получить бонусы.
Для обработки исключений в языке программирования C используется механизм setjmp/longjmp или стандартная библиотека.
1. Механизм setjmp/longjmp:
— Используется функция setjmp для установки точки возврата и сохранения состояния программы.
— В случае возникновения исключения, вызывается функция longjmp, которая возвращает выполнение программы в точку, сохраненную setjmp.
— При этом, возвращаемое значение longjmp указывает на тип исключения, которое произошло.
— Пример использования:
«`c
#include
#include
jmp_buf buf;
void divide(int a, int b) {
if (b == 0) {
longjmp(buf, 1); // выбрасываем исключение
}
printf(«Результат деления: %dn», a / b);
}
int main() {
int a = 10, b = 0;
int result = setjmp(buf); // устанавливаем точку возврата
if (result == 0) {
divide(a, b);
} else {
printf(«Деление на нольn»);
}
return 0;
}
«`
2. Стандартная библиотека:
— В случае возникновения исключительной ситуации, функции стандартной библиотеки устанавливают глобальную переменную errno, которая содержит код ошибки.
— Для обработки ошибок используется макрос perror или функция strerror для вывода сообщения об ошибке.
— Пример использования:
«`c
#include
#include
#include
int main() {
FILE* file = fopen(«nonexistent.txt», «r»);
if (file == NULL) {
perror(«Ошибка открытия файла»);
printf(«Код ошибки: %dn», errno);
printf(«Сообщение об ошибке: %sn», strerror(errno));
}
return 0;
}
«`
Оба подхода имеют свои особенности и выбор между ними зависит от конкретной задачи и требований к обработке исключений.