setjmp

Сохраняет текущее состояние программы.

Синтаксис

int setjmp(
   jmp_buf env
);

Параметры

env
Переменная, в которой хранится среда.

Возвращаемое значение

Возвращает 0 после сохранения среды стека. Если setjmp возвращается из-за longjmp вызова, возвращается value аргумент valuelongjmpили значение аргумента longjmp 0, setjmp возвращается значение 1. Не возвращается ошибка.

Замечания

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

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

Невозможно использовать setjmp переход от машинного кода к управляемому коду.

Блок, относящийся только к системам Майкрософт

В коде Microsoft C++ в Windows longjmp используется та же семантика стека, что и код обработки исключений. Безопасно использовать в том же месте, что и исключения C++. Однако это использование не является переносимым и поставляется с некоторыми важными предостережениями. Дополнительные сведения см. в разделе longjmp.

Завершение блока, относящегося только к системам Майкрософт

Примечание.

В переносимом коде C++ нельзя предполагать setjmp и longjmp поддерживать семантику объектов C++. В частности, setjmp/longjmp пара вызовов не определена при замене setjmp и longjmp вызове catchthrow любых нетривиальных деструкторов для любых автоматических объектов. В программах C++ рекомендуется использовать механизм обработки исключений C++.

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

Требования

Маршрут Обязательный заголовок
setjmp <setjmp.h>

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

Пример

Пример см. в примере _fpreset.

См. также

Управление процессами и средой
longjmp