A.10 Глобальные переходы— setjmp.h

Предыдущая  Содержание  Следующая V*D*V

#include <setjmp.h>

 

jmp_buf onError;

int val;

 

    if (val = setjmp(onError))

        обработка ошибки

    else

        первый вызов

 

    ...

 

    longjmp(onError, val);

 

Эти функции используются, чтобы выполнить глобальный переход из одной функции обратно в другую, которая была вызвана ранее и всё ещё активна. Во время первого вызова setjmp() записывает местоположение в jmp_buf и возвращает ноль. Позже longjmp() вернётся к этому местоположению; тогда setjmp() возвращает любое значение, которое было определено как второй параметр longjmp(); если это значение равно нулю, то setjmp() возвратит единицу.

Есть дополнительные условия: контекст, из которого был вызвана setjmp(), всё ещё должен быть активным; этот контекст не может быть очень сложным; значения переменных не восстанавливаются; переходить обратно к точке, из которой был вызван longjmp(), не возможен; и так далее. Однако, уровни рекурсии обрабатываются верно.

 

Предыдущая  Содержание  Следующая