setjmp/longjmp相同的代码在linux,windows下表现不一样。
代码
#include <csetjmp>
#include <iostream>
using namespace std;
jmp_buf jb1;
jmp_buf jb2;
auto bar() {
if (setjmp(jb2) == 0) {
longjmp(jb1, 1);
} else {
longjmp(jb1, 2);
}
}
void foo() {
bar();
}
void testjmp() {
auto i = setjmp(jb1);
if (i == 0) {
foo();
} else {
cout << "i = " << i << endl;
}
i = setjmp(jb1);
if (i == 0) {
longjmp(jb2, -1);
} else {
cout << "i = " << i << endl;
}
}
int main() {
testjmp();
return 0;
}