Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Функция Выполняет нелокальный переход.

 
 
 
 Синтаксис          #include <setjmp.h>
 
                    void longjmp(jmp_buf jmpb, int retval);
 
 
 
 Файл, содержащий   setjmp.h
 
 прототип
 
 
 
 Описание           Вызов функции  longjmp  восстанавливает  состояние
 
                    задачи,  которое  было  установлено  при последнем
 
                    вызове функции setjmp с аргументом jmpb. Затем она
 
                    возвращает  значение  retval также,  как и функция
 
                    setjmp.
 
 
 
                    Cостояние задачи представляет собой следующее:
 
 
 
                    - все сегментные регистры (CX,DS,ES,SS);
 
                    - переменные-регистры (SI,DI);
 
                    - указатель стека (SP);
 
                    - указатель базы (BP);
 
                    - флаги.
 
 
 
                    Состояние задачи  является достаточно полным,  так
 
                    что  функции   setjmp   и   longjmp   могут   быть
 
                    использованы   как   инструмент   для  организации
 
                    сопрограмм. Данные подпрограммы могут быть полезны
 
                    для    работы   с   ошибками   и   исключительными
 
                    ситуациями,   происходящими    в    низкоуровневых
 
                    подпрограммах прикладных программ.
 
 
 
                    Перед использованием  функции  longjmp  необходимо
 
                    вызвать  функцию  setjmp.   Программа   вызывающая
 
                    setjmp  и  устанавливающая  jmpb должна оставаться
 
                    активной и  не  должна  возвращать  управления  до
 
                    вызова  longjmp.  Если это случится,  то результат
 
                    непредсказуем.
 
 
 
                    longjmp не  может  посылать  значение  0.  Если  0
 
                    посылается в retval, то он заменяется на 1.
 
 
 
                    Примечание. Функции   setjmp   и   longjmp  нельзя
 
                    использовать для реализации  оверлейных  программ.
 
                    Обычно    setjmp    и    longjmp    сохраняют    и
 
                    восстананавливают все,  необходимые для реализации
 
                    сопрограмм,   однако   для   управления  оверлеями
 
                    необходимо    следить    за     стеком,     причем
 
                    подразумевается,  что  стек  один.  При реализации
 
                    сопрограмм вы обычно используете  два  стека,  или
 
                    две  части  одного стека,  и поэтому администратор
 
                    оверлеев не сможет корректно их отслеживать.
 
 
 
                    Вы можете  иметь  задачи,  работающие  в   фоновом
 
                    режиме,  которые  используют  свой стек,  или свой
 
                    раздел  общего  стека,  однако  вы   должны   быть
 
                    уверены,  что они не используют оверлеев,  и вы не
 
                    должны использовать  оверлейные  версии  setjmp  и
 
                    longjmp для переключения на эти фоновые задачи.
 
 
 
 Возвращаемое       Нет.
 
 значение
 
 
 
 Переносимость      Функция поддерживаются    на   системах   UNIX   и
 
                    стандартом  ANSI  C.  Функция  не   совместима   с
 
                    Windows.
 
 
 
 Смотрите также     ctrlbrk, setjmp, signal.
 
 
 
 Пример:
 
 
 
 #include <stdio.h>
 
 #include <setjmp.h>
 
 
 
 int main(void)
 
 {
 
    jmp_buf jumper;
 
    int value;
 
    value = setjmp(jumper);
 
    if (value != 0) {
 
      printf("longjmp со значением %d\n", value);
 
      exit(value);
 
    }
 
    printf("Вызов подпрограммы ... \n");
 
    subroutine();
 
 }
 
 subroutine()
 
 {
 
    longjmp(jumper,l);
 
 }
 
 
 
 Вывод:
 
 
 
 Вызов подпрограммы ...
 
 Longjmp со значением l


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS