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() является выход из глубоко вложенных процедур при возникновении фатальной ошибки.