Описание тега longjmp

В C и C++ longjmp - это нелокальная функция перехода, которая может перемещаться между функциями.

Longjmp (и дополнительный setjmp) позволяют создавать нелокальные переходы в программах на C - по сути, это нелокальныйgoto. Это функция, которая в основном эквивалентны исключениям в более поздних языках, и фактически используется для записи исключений, как для систем C.

Он работает, загружая состояние окружающей среды (jmp_buf) сохраненный ранее setjmpнад текущим состоянием. В процессе он также возвращает значение на месте исходногоsetjmpвызов. На практике состояние окружающей среды связано со стеком, и это может вызвать некоторые проблемы.

Например, если кадр, в котором setjmpвозвращается, а затем переход к этому конкретному кадру вызывает неопределенное поведение, поскольку этот кадр больше не существует. Еще одно следствиеlongjmp заключается в том, что не происходит раскручивания стека, поэтому открытые файлы не будут закрыты, а переменные кучи не будут освобождены.

В большинстве стандартных библиотек C его можно найти в setjmp.h. Имеется подпись вызоваvoid longjmp(jmp_buf env, int val);


Если вы не понимаете ничего из вышеперечисленного, пожалуйста , не используйте longjmp - это очень инструмент, который может вас укусить, если вы неопытны. Это особенно верно для C++, в котором есть исключения, которыми труднее злоупотреблять, чемlongjmp является.