WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Стандартная библиотека
языка программирования С

setjmp.h — заголовочный файл стандартной библиотеки языка Си, объявляющий макросы и тип данных для нелокальных переходов[1]. В Си существует оператор goto, позволяющий переходить в любое место в пределах функции (с некоторыми оговорками), однако переход между функциями с его помощью невозможен.

Типы данных

Библиотека объявляет тип данных jmp_buf, который является массивом и который может использоваться для сохранения и восстановления контекста выполнения программы. Тип не включает в себя информацию о контексте вычислений с плавающей запятой, статусе открытых файлов или иных компонентов[1].

Функции (макросы)

#include <setjmp.h>
int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);

Стандарт объявляет две функции: setjmp() (может быть макросом) и longjmp(), для сохранения и восстановления контекста, соответственно. Функция setjmp() сохраняет контекст в переменной env и возвращает 0, если это был прямой вызов, или ненулевое значение, если это был возврат из longjmp()[1].

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

Функция longjmp() возвращает выполнение в точку вызова setjmp() со значением val. Все объекты с неавтоматическим выделением памяти сохраняют своё значение. Также сохраняют своё значение автоматические объекты с квалификатором volatile.

Если функция была вызвана без соответствующего вызова setjmp(), или функция, в которой восстанавливается выполнение, уже завершилась, то поведение не определено.

Использование setjmp() и longjmp() может привести к утечкам памяти, если выделение происходит между вызовами этих функций[1].

Применение

Используются в одном из методов обработки исключений — SJLJ, что расшифровывается как «setjmp/longjmp»[2]. Данный механизм использовался в ранних реализациях исключений C++[3].

Также может применяться в кооперативной многозадачности[4].

Примечания

  1. 1 2 3 4 ISO/IEC 9899:1999
  2. WindowsGCCImprovements - GCC Wiki (англ.). gcc.gnu.org. Проверено 5 января 2019.
  3. Christophe de Dinechin. C++ Exception Handling for IA-64 (англ.) // www.usenix.org : сайт. — 2000. — 22 October.
  4. The Long Jump (англ.). Dr. Dobb's (11 November 2012). Проверено 5 января 2019.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии