Здравствуйте, Этот вопрос остается не освещенным в учебниках по программированию на языкe С. Было бы интересно знать, зачем и как применяют функции setjmp и longjmp. Если возможно то приведите, какой нибудь, пример их использования. Спасибо.
Ответ
Пример использования longjmp из моей реальной жизни. Делал достаточно объёмную утилиту для тестирования железяки, которую мы производим. Там, в частности, был тест памяти. Требовалось, что бы тестирование выполнялось до нажатия Ctrl/C, после чего выполнялся переход на следуюий этап тестирования. Делал так:
// Задаём реакцию на нажатие комбинации клавиш Сtrl/C
signal(SIGINT, sig_sigint);
. . .
// Перед началом цикла запоминаем положение:
if (setjmp(jmpbuffer) != 0) {
// Длинный переход из обработчика сигнала завершения
printf("
Получен сигнал завершения работы
");
goto end_loop;
}
// Сам цикл тестирования
do {
. . .
} while (do_work !=0);
end_loop:
Таких этапов тестирования было несколько. И после каждого нажатия Ctrl/C программа переходила к СЛЕДУЮЩЕМУ этапу. Попробуйте сделать такое на try/catch! :-) И не надо говорить про оператор goto! В данном контексте, с переходом вперёд, его использование абсолютно уместно.
Комментариев нет:
Отправить комментарий