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

Все, что связано со стандартной библиотекой setjmp C и подпрограммами setjmp() и longjmp(), которые обеспечивают поток управления, изменяющий обычную последовательность вызова и возврата подпрограммы.

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

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

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

В большинстве стандартных библиотек C его можно найти в разделе setjmp.h. Он имеет сигнатуру вызова:

      void longjmp(jmp_buf env, int val);

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