Пространства имён
Варианты
Действия

std::longjmp

Материал из cppreference.com
< cpp‎ | utility‎ | program

 
 
 
Коммунальные услуги Программа поддержки
Программа прекращения
Оригинал:
Program termination
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
abort
exit
quick_exit(C++11)
_Exit(C++11)
Взаимодействие с окружающей средой
Оригинал:
Communicating with the environment
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Сигналы
Оригинал:
Signals
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Сигнал типа
Оригинал:
Signal types
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
Нелокальные переходы
Оригинал:
Non-local jumps
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
setjmp
longjmp
Типы
Оригинал:
Types
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
jmp_buf
 
Определено в заголовочном файле <csetjmp>
void longjmp( std::jmp_buf env, int status );
Нагрузки env контексте выполнения спас предыдущего вызова setjmp. Эта функция не возвращает. Управление передается в точку вызова макро-setjmp, которые создали env. Это setjmp затем возвращает значение, передается в качестве status.
Оригинал:
Loads the execution context env saved by a previous call to setjmp. This function does not return. Control is transferred to the call site of the macro setjmp that set up env. That setjmp then returns the value, passed as the status.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Если функция, которая называется setjmp завершился, поведение не определено (другими словами, только прыжки в длину стек вызовов разрешено)
Оригинал:
If the function that called setjmp has exited, the behavior is undefined (in other words, only long jumps up the call stack are allowed)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Нет деструкторов для автоматического объекты называются. Если замена std::longjmp с throw и setjmp с catch бы выполнить нетривиальный деструктор для любых автоматических объектов, поведение таких std::longjmp не определен.
Оригинал:
No destructors for automatic objects are called. If replacing of std::longjmp with throw and setjmp with catch would execute a non-trivial destructor for any automatic object, the behavior of such std::longjmp is undefined.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Параметры

env -
переменная со ссылкой на состояние выполнения программы спас std::setjmp
Оригинал:
variable referring to the execution state of the program saved by std::setjmp
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
status -
Значение вернуться из setjmp. Если она равна 0, 1 вместо него используется
Оригинал:
the value to return from setjmp. If it is equal to 0, 1 is used instead
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

(Нет)

[править] Пример

#include <iostream>
#include <csetjmp>
 
std::jmp_buf jump_buffer;
 
[[noreturn]] void a(int count)
{
    std::cout << "a(" << count << ") called\n";
    std::longjmp(jump_buffer, count+1);  // setjump() will return count+1
}
 
int main()
{
    int count = setjmp(jump_buffer);
    if (count != 9) {
        a(count);  // This will cause setjmp() to exit
    }
}

Вывод:

a(0) called
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called

[править] См. также

сохраняет контекст
Оригинал:
saves the context
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(функция-макрос) [edit]
C documentation for longjmp