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);
}
