setjmp()和longjmp().使用setjmp()可以在程序中保存一个已知的无错误状态,一旦发生错误,就可以通过longjmp()返回到该状态。
示例:
#include <iostream>
#include <csetjmp>
using namespace std;
class Rainbow {
public:
Rainbow() {cout << "Rainbow()" << endl;}
~Rainbow() {cout << "~Rainbow()" << endl;}
};
jmp_buf kansas;
void oz() {
Rainbow rb;
for(int i = 0; i < 3; i++) {
cout << "there's no place like home" << endl;
}
longjmp(kansas,47);
}
int main()
{
if (setjmp(kansas) == 0) {
cout << "tornado, witch, muchkins..." << endl;
oz();
}
else {
cout << "Autie Em!"
<< " I had the strangest dream..."
<< endl;
}
return 0;
}
|
运行结果:
tornado, witch, muchkins...
Rainbow()
there's no place like home
there's no place like home
there's no place like home
Autie Em! I had the strangest dream...
Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.
运行环境: codeblock 10 + gcc + winXP
阅读(2342) | 评论(1) | 转发(0) |