Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11650
Последний выпуск: 19.06.2015

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()
                {
            
               /*  при  выходе из программы убедитесь, что файлы данных не
         будут запорчены */
            
                .
                .
                .
                }.
           
           
            
            

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог