CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
setjmp
SETJMP #include<setjmp.h> int setjmp(env); jmp_buf env; переменная, в которой хранится окружение. Описание. Функция setjmp сохраняет состояние стека, который может быть последовательно восстановлен посредством использования функ- ции longjmp. Функции setjmp и longjmp обеспечивают возможность выполне- ния нелокального (nonlocal) перехода и обычно используются для передачи управления к обработке ошибок для восстановления кода в ранее вызванной процедуре (без использования обычного вызова), для возврата условных обозначений. Вызов setjmp активизирует сох- ранение текущего состояния стека в env. Последующий вызов longjmp восстанавливает сохраненное состояние и возвращает управление на указатель (точку входа), непосредственно следующий за соответст- вующим вызовом setjmp. Когда вызывается функция longjmp, значения всех переменных (за исключением переменных регистра) становятся доступными для процедуры, которая принимает управление и содержит значения этих переменных. Значения переменных регистра непредска- зуемы. Возвращаемое значение. После сохранения состояния стека функция setjmp возвращает значение 0. Если в результате вызова longjmp возвращается setjmp, тогда возвращается и значение value аргумента longjmp. Возвращае- мого значения в случае ошибки нет. См. также longjmp. Замечание. После выполнения longjmp значения переменных ре- гистра в процедуре, вызывающей setjmp, не могут быть восстановле- ны (возвращены) к собственным значениям. Пример: #include <stdio.h> #include <setjmp.h> jmp_buf mark; main() { if (setjmp(mark) != 0) { printf("longjmp has been called\n"); recover(); exit(1); } printf("setjmp has been called\n"); . . . p(); . . . } p() { int error = 0; . . . if (error != 0) longjmp(mark, -1); . . . } recover() { /* при выходе из программы убедитесь, что файлы данных не будут запорчены */ . . . }.