setjmp
Сохраняет текущее состояние программы.
Синтаксис
int setjmp(
jmp_buf env
);
Параметры
env
Переменная, в которой хранится среда.
Возвращаемое значение
Возвращает 0 после сохранения среды стека. Если setjmp
возвращается из-за longjmp
вызова, возвращается value
аргумент value
longjmp
или значение аргумента 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
вызове catch
throw
любых нетривиальных деструкторов для любых автоматических объектов. В программах C++ рекомендуется использовать механизм обработки исключений C++.
Дополнительные сведения см. в разделе "Использование setjmp
и longjmp
".
Требования
Маршрут | Обязательный заголовок |
---|---|
setjmp |
<setjmp.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
Пример см. в примере _fpreset
.