Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Void longjmp (jmp_buf, int val);

Jmp_but

Нелокальные переходы Setjmp.

Функции Setjmp() и Longjmp().

Тип массива для сохранения информации об окружении, необходимой для последующего востановления окружения.

int setjmp (jmp_buf env);

Записывает состояние окружения в параметр типа jmp_buf для последующего использования функцией longjmp.

В случае прямого вызова макрос setjmp возвращает нулевое значение. В случае возврата как результата вызова функции longjmp, setjmp возвращает нулевое значение.

Вызов макроса setjmp должен появляться только в одном из следующих контекстов:

- выражение условия в целом в операторах выбора цикла;

- операнд операции проверки на равенство или отношения в случае, когда второй операнд является константным выражением, а все выражения в целом является выражением условия в операторах выбора или цикла;

- операнд унарной операции!, если при этом все выражения в целом является выражением условия в операторах выбора или цикла;

- оператор выражения в целом.

Эта функция восстанавливает окружение, которое было сохранено в соответствующем объекте типа jmp_buf при последнем вызове макроса setjmp в пределах той же функции, из которой вызывается longjmp. Если такой вызов setjmp не был сделан или если функция, содержащая вызов setjmp, уже завершила свое выполнение, поведение функции longjmp не определено.

Все доступные объекты восстанавливают свои значения, которые они имели во втемя вызова longjmp, за исключением автоматических объектов, локальных для функции, из которой вызывался соответствующий макрос setjmp, и которые не определены со спецификатором volatile и были изменены между вызовами setjmp и longjmp – значения таких объектов не определены.

Хотя longjmp обходит обычные механизмы вызова функции и возврата из функции, longjmp работает корректно в контексте прерываний, сигналов и функций, связанных с нами. Однако, если функция longjmp вызывается из вложенного обработчика сигналов (то есть функции, вызванной в результате сигнала, посланного во время обработки другого сигнала), то ее поведение не определено.

После завершения longjmp выполнение программы продолжается так, как если бы соответствующий вызов макроса setjmp возвратил значение, определяемое параметром val. Функция longjmp не может заставить макроса setjmp вернуть значение 0; если val равно 0, setjmp возвратит значение 1.

 

<== предыдущая лекция | следующая лекция ==>
Решение задачи в защищенном режиме | Асинхронные методы замены контекста
Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 341; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.