A.10 Глобальные переходы— setjmp.h |
Предыдущая Содержание Следующая |
#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(), не возможен; и так далее. Однако, уровни рекурсии обрабатываются верно.
|
Предыдущая Содержание Следующая |