CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
longjmp - длинный переход
Описание
Эти функции позволяют осуществлять переходы между функциями. Они могут быть полезны при обработке ошибок или прерываний, происшедших в низкоуровневых процеду- рах программы. setjmp сохраняет окружение стека в переменной env для дальнейшего использования в longjmp. longjmp восстанавливает окружение, сохраненное ранее посредством setjmp в буфере env. value, возвращаемое в окружение, как бы поставляет setjmp. ЗАМЕЧАНИЕ: Окружение должно быть зафиксировано с ис- пользованием setjmp, вызываемой из той же функции, которая содержит обращение к фу- нкции longjmp, или из "родительской", т.е. функции, содержащей обращение к той, что вызывает longjmp. После завершения longjmp выполнение программы продол- жается, как если бы соответствующее обращение к setjmp возвратило value. value никогда не будет 0. Если value передано как 0, будет возвращено значение 1.
Использование
#include <setjmp.h> void longjmp (jmp_buf env, int value); /* ANSI */ int setjmp (jmp_buf env); /* ANSI */
Возвращаемое значение
setjmp возвращает 0. longjmp не имеет возвращаемого значения.
Пример
#include <setjmp.h> #include <stdio.h> void doscall(void); jmp_buf environment; int error_val = -1; main() { int error code; error_code = setjmp(environment); if (error_code !=0) { printf("Вызван longjmp\n"); exit(1); } printf("Вызван setjmp\n"); doscall(); } doscall() { longjmp(environment, error_val); }