- setjmp.h
-
Стандартная библиотека
языка программирования С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]
Примечания
- ↑ 1 2 3 4 ISO/IEC 9899:1999
Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей.Категория:- Стандартные библиотечные заголовки языка Си
Wikimedia Foundation. 2010.