std::jmp_buf
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <csetjmp>
|
||
typedef /* не определено */ jmp_buf; |
||
Тип std::jmp_buf это тип массива, подходящий для хранения информации для восстановления вызывающей среды. Сохранённой информации достаточно для восстановления выполнения в правильном блоке программы и вызова этого блока. Состояние флагов состояния для чисел с плавающей запятой, открытые файлы или любые другие данные не сохраняются в объекте типа std::jmp_buf.
Пример
Запустить этот код
#include <csetjmp>
#include <iostream>
std::jmp_buf my_jump_buffer;
[[noreturn]] void foo(int status)
{
std::cout << "foo(" << status << ") вызвана\n";
std::longjmp(my_jump_buffer, status+1); // setjmp() вернёт status+1
}
int main()
{
volatile int count = 0; // изменяемые локальные переменные в области видимости
// setjmp должны быть volatile
if (setjmp(my_jump_buffer) != 5)
{ // равенство против константного выражения в if
count += 1; // Инкремент volatile переменной устарел, начиная с C++20 (P1152)
foo(count); // Это приведёт setjmp() к выходу
}
}
Вывод:
foo(1) вызвана
foo(2) вызвана
foo(3) вызвана
foo(4) вызвана
Смотрите также
| сохраняет контекст (функция-макрос) | |
| переход в указанное место (функция) | |
Документация C по jmp_buf
| |