setjmp.h | это... Что такое setjmp.h? (original) (raw)

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. 1 2 3 4 ISO/IEC 9899:1999