longjmp()

#include <setjmp.h>
void longjmp(jmp_buf envbuf, int status);

Описание

Возобновляет выполнение программы с места последнего обращения к функции setjmp()

Функция longjmp() возобновляет выполнение программы с места последнего обращения к функции setjmp(). Таким образом, функции longjmp() и setjmp() предоставляют средство передачи управления между функциями. Обратите внимание на необходимость включения заголовка <setjmp.h>(в языке C++ используется заголовок <csetjmp>).

Функция longjmp() восстанавливает состояние стека, сохраненное в буфере envbuf с помощью функции setjmp(). В результате выполнение программы возобновляется с оператора, следующего за вызовом функции setjmp(). Иначе говоря, компьютер вводится в "заблуждение": он считает, будто управление программой не выходило за пределы функции, которая вызвала функцию setjmp().(Выражаясь образн(), функция longjmp() "искривляет" время и пространство(памяти), чтобы вернуться в предыдущую точку программы, не выполняя нормальный процесс возврата из функции.)

Буфер evnbuf имеет тип jmp_buf, который определен в заголовке <setjmp.h>. Этот буфер должен быть установлен посредством обращения к функции setjmp() до вызова функции longjmp().

Значение параметра status становится возвращаемым значением функции setjmp(), и его можно опросить, чтобы определить "происхождение" длинного перехода. Единствен ным недопустимым значением является нуль. Функция setjmp() возвращает нуль в том случае, когда она вызывается непосредственно программой, а не косвенно, путем выполнения функции longjmp().

В основном, функция longjmp() используется для возврата из глубоко вложенного набора функций при возникновении ошибок.