Поделиться через


longjmp

Восстанавливает среду стека и языковой стандарт выполнения.

void longjmp(
   jmp_buf env,
   int value 
);

Параметры

  • env
    Переменная для хранения среды.

  • значение
    Возвращаемое значение при вызове setjmp.

Заметки

Функция longjmp восстанавливает среду стека и языковой стандарт выполнения, сохраненные ранее в envsetjmp.setjmp и longjmp предоставляют способ выполнения нелокального goto; они обычно используются для передачи управления выполнением в код обработки ошибок или восстановления ранее вызываемой подпрограммы без использования обычных соглашений вызова или возврата.

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

Вызовите longjmp перед возвратом из функции, вызывающей setjmp; в противном случае результаты становятся непредсказуемыми.

Обратите внимание на следующие ограничения при использовании longjmp:

  • Не следует полагаться на то, что значения всех переменных регистра останутся такими же.Значения переменных регистра в подпрограммах, вызывающих setjmp, не могут быть восстановлены до правильных значений после выполнения longjmp.

  • Не используйте longjmp для передачи контроля управления из подпрограммы обработки прерываний, если только прерывание не вызвано исключением с плавающей запятой.В этом случае программа может вернуться из обработчика прерываний с помощью longjmp, если она сначала повторно инициализирует пакет математических операций с плавающей запятой, вызвав _fpreset.

    Примечание Будьте внимательны при использовании setjmp и longjmp в программах C++.Поскольку эти функции не поддерживают семантику объекта C++, безопаснее использовать механизм обработки исключений C++.

Дополнительные сведения см. в разделе Использование setjmp и longjmp.

Требования

Функция

Требуемый заголовок

longjmp

<setjmp.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Библиотеки

Все версии Библиотек времени выполнения C.

Пример

Посмотрите следующий пример для _fpreset.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Процесс и управление среды

setjmp