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]

Примечания[править | править вики-текст]