Описание тега setjmp
Пара функций и позволяет создавать нелокальные переходы в программах на C — по сути, это нелокальный переход.
goto
которые могут перескакивать через функции. Это функция, которая в основном эквивалентна исключениям в более поздних языках, и фактически использовалась для написания систем, подобных исключениям, для C.
Он работает, загружая состояние окружающей среды (
jmp_buf
), сохраненное ранее по сравнению с текущим состоянием. В процессе он также возвращает значение на месте исходного вызова. На практике состояние среды связано со стеком, и это может вызвать некоторые проблемы.
Например, если кадр, в котором
setjmp
возвращается, то переход к этому конкретному фрейму вызывает неопределенное поведение, потому что этого фрейма больше не существует. Другим следствием этого является то, что раскручивание стека не происходит, поэтому открытые файлы не будут закрыты, а переменные кучи не будут освобождены.
В большинстве стандартных библиотек C его можно найти в разделе
setjmp.h
. Он имеет сигнатуру вызова:
void longjmp(jmp_buf env, int val);
Если вы не понимаете ничего из вышеперечисленного, пожалуйста , не используйте ! Это очень инструмент, который может вас укусить, если вы неопытны. Это особенно верно для C++, в котором есть исключения, которыми труднее злоупотреблять, чем в C++.
longjmp
является.