Справочник по C/C++
longjmp()

#include 
void longjmp(jmp_buf envbuf, int status);

Описание

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

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

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

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

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

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