Программирование на C и C++

Онлайн справочник программиста на C и C++

longjmp

void longjmp(jmp_buf, int val)

Прототип: 
Описание: 

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

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

Величина val становится возвращаемым значением функции setjmp() и может быть проанализи­рована с целью определения, откуда был совершен длинный переход. Единственным недопусти­мым значением является 0.

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

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

Пример: