下面的代码只是打印"5“
#include <iostream>
#include <setjmp.h>
static jmp_buf buf;
float funcB()
{
setjmp(buf);
return 1.6f;
}
int funcA()
{
longjmp(buf,5);
std::cout<<"b";
return 2;
}
int main()
{
funcB();
std::cout<<funcA();
}但这没有任何意义,因为setjmp正在返回5,而不是任何一个函数.别担心,我没有在任何地方使用这个代码,我只是好奇而已!
发布于 2013-11-29 16:19:29
发布于 2013-11-29 16:18:30
不能使用longjmp返回已退出的函数。换句话说,longjmp不会为您恢复堆栈。见这里。
你需要的是一种类似于计划的语言,在那里做这样的事情是完全正常的。
发布于 2013-11-29 16:22:40
您所使用的编译器似乎都使用了对setjmp和longjmp所做工作的严格解释:
这个宏可能返回不止一次:第一次,在直接调用时;在这种情况下,它总是返回零。当将信息设置为env调用longjmp时,宏将再次返回;这一次,如果与零不同,则将传递给longjmp的值作为第二个参数返回,如果值为零,则返回1。
来自这里
因为它是UB,它可以这样做,订购比萨,结束世界.任何东西都是有效的。
https://stackoverflow.com/questions/20289762
复制相似问题