Defined in header <csetjmp> | ||
|---|---|---|
typedef /* unspecified */ jmp_buf; |
The std::jmp_buf type is an array type suitable for storing information to restore a calling environment. The stored information is sufficient to restore execution at the correct block of the program and invocation of that block. The state of floating-point status flags, or open files, or any other data is not stored in an object of type std::jmp_buf.
#include <csetjmp>
#include <iostream>
std::jmp_buf my_jump_buffer;
[[noreturn]] void foo(int status)
{
std::cout << "foo(" << status << ") called\n";
std::longjmp(my_jump_buffer, status + 1); // setjmp() will return status + 1
}
int main()
{
volatile int count = 0; // modified locals in setjmp scope must be volatile
if (setjmp(my_jump_buffer) != 5) // equality against constant expression in an if
{
count += 1; // Increment of a volatile variable is deprecated since C++20 (P1152)
foo(count); // This will cause setjmp() to exit
}
}Output:
foo(1) called foo(2) called foo(3) called foo(4) called
| saves the context (function macro) |
|
| jumps to specified location (function) |
|
C documentation for jmp_buf |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/program/jmp_buf