Страницы

Поиск по вопросам

среда, 9 января 2019 г.

Зачем нужны функции setjmp longjmp?

Здравствуйте, Этот вопрос остается не освещенным в учебниках по программированию на язык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! В данном контексте, с переходом вперёд, его использование абсолютно уместно.

Комментариев нет:

Отправить комментарий