Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
When setjmp and longjmp are used together, they provide a way to execute a non-local goto
. They are typically used in C code to pass execution control to error-handling or recovery code in a previously called routine without using the standard calling or return conventions.
Caution
Because setjmp
and longjmp
don't support correct destruction of stack frame objects portably between C++ compilers, and because they might degrade performance by preventing optimization on local variables, we don't recommend their use in C++ programs. We recommend you use try
and catch
constructs instead.
If you decide to use setjmp
and longjmp
in a C++ program, also include <setjmp.h> or <setjmpex.h> to assure correct interaction between the functions and Structured Exception Handling (SEH) or C++ exception handling.
Microsoft Specific
If you use an /EH option to compile C++ code, destructors for local objects are called during the stack unwind. However, if you use /EHs or /EHsc to compile, and one of your functions that uses noexcept calls longjmp
, then the destructor unwind for that function might not occur, depending on the optimizer state.
In portable code, when a longjmp
call is executed, correct destruction of frame-based objects is explicitly not guaranteed by the standard, and may not be supported by other compilers. To let you know, at warning level 4, a call to setjmp
causes warning C4611: interaction between '_setjmp' and C++ object destruction is non-portable.
END Microsoft Specific