[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: это называется нелокальный goto...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Михаил Евстафьев 14 ноября 2001 г. 18:28
В ответ на: Ответ: отправлено Elektronik 14 ноября 2001 г. 12:11

Функция setjmp запоминает текущее состояние стека (в смысле текущее значение указателя) и, наверно, регистров в структуре (глобальной), которая передается ей в качестве параметра.

longjmp восстанавливает из этой структуры указатель стека и регистры.
Выполнение программы начинается с той точки как будто произошел выход из setjmp. При выходе из setjmp можно узнать что это было, первый вызов для запоминания стека или результат выполнения longjmp.

Это годится если точка куда нужно перейти стоит выше по дереву вызовов, чем место где вызывается longjmp. Например на начало функции main.

Функции входят в стандартную библиотеку С.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru