《OOC》笔记(2)——C语言实现trycatchfinally
时间: 2023-11-06 10:05:58 浏览: 180
try 与 catch finally关键字
在C语言中,没有原生的try-catch-finally语法,但我们可以通过一些技巧来实现类似的效果。下面是一种常见的实现方式:
```c
#include <setjmp.h>
#include <stdio.h>
jmp_buf buf;
void try() {
if (setjmp(buf) == 0) {
// 如果是第一次调用setjmp,返回0,继续执行try语句块
printf("try\n");
} else {
// 如果setjmp被longjmp调用,返回非0,执行catch语句块
printf("catch\n");
}
}
void throw() {
longjmp(buf, 1);
}
void finally() {
printf("finally\n");
}
int main() {
try();
throw();
finally();
return 0;
}
```
在上面的代码中,我们使用了`setjmp`和`longjmp`两个函数来实现try-catch-finally的功能。`setjmp`函数是一个保存当前程序状态的函数,其返回值可以用于判断是首次调用还是从`longjmp`函数返回的。`longjmp`函数则是一个跳转到某个特定位置的函数,可以在异常发生时跳转到catch语句块。
注意,使用`setjmp`和`longjmp`函数需要非常小心,因为它们可以跨越函数调用和栈帧,可能会破坏程序的正常运行。因此,在实践中,我们应该尽量避免使用这种方式来处理异常,而是使用更安全可靠的方式来避免异常的发生。
阅读全文