std::longjmp
STD::Longjmp
Defined in header | | |
---|---|---|
void longjmp( std::jmp_buf env, int status | | |
加载执行上下文。env
之前的调用保存到setjmp
此函数不返回。控件转移到宏的调用站点。setjmp
建立env
.那个setjmp
然后返回作为status
...
如果调用setjmp
退出后,行为是未定义的%28,换句话说,只有长时间跳转的调用堆栈才允许%29。
不调用自动对象的析构函数。如果替换...std::longjmp
带着throw
和setjmp
带着catch
将为任何自动对象执行一个非平凡的析构函数,std::longjmp
还没有定义。
参数
env | - | variable referring to the execution state of the program saved by std::setjmp |
---|---|---|
status | - | the value to return from setjmp. If it is equal to 0, 1 is used instead |
返回值
%280%29
注记
longjmp
C中用于处理函数无法有意义返回的意外错误条件的机制。C++一般使用异常处理为了这个目的。
例
二次
#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()
{
volatile int count = 0; // local variables must be volatile for setjmp
if (setjmp(jump_buffer) != 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
二次
另见
setjmp | saves the context (function macro) |
---|
c关于Longjmp的文档
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。