在 C 语言中,可以使用 setjmp()和 longjmp()函数的组合,在 setjmp.h.来自维基百科的例子中定义
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void second(void) {
printf("second\n"); // prints
longjmp(buf,1); // jumps back to where setjmp
// was called - making setjmp now return 1
}
void first(void) {
second();
printf("first\n"); // does not print
}
int main() {
if ( ! setjmp(buf) ) {
first(); // when executed, setjmp returns 0
} else { // when longjmp jumps back, setjmp returns 1
printf("main"); // prints
}
return 0;
}
注意: 我实际上建议你 没有使用它们,因为它们在 C + + 中工作得很糟糕(本地对象的析构函数不会被调用) ,而且真的很难理解发生了什么。而是返回某种错误。
问题只是“如何抛出”,而不是如何捕捉,甚至如何抛出特定类型的异常。很久以前,我遇到过这样的情况: 我们需要触发一个来自 C 的异常,以便在 C + + 中捕获它。具体来说,我们偶尔会收到“纯虚函数调用”错误的报告,并且需要说服 C 运行时的 _ purecrefunction 抛出一些东西。所以我们添加了我们自己的除以0的 _ puretrefunction,然后,我们得到了一个异常,我们可以在 C + + 上捕捉到它,甚至可以使用一些堆栈乐趣来查看哪里出错了。