longjmp

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

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

  
      void longjmp(  
   jmp_buf env,  
   int value   
);  

Параметры

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

value
Значение, возвращаемое для setjmp вызова.

longjmp Функция восстанавливает среду стека и языкового стандарта выполнения ранее сохраненные в env по setjmp. 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.

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

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

Показ: