Light-industry-up.ru

Экосистема промышленности

Setjmp.h

03-08-2023

Стандартная библиотека
языка программирования С

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. ↑ ISO/IEC 9899:1999


Setjmp.h.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06