gpt4 book ai didi

c - C 中的异常处理 - 使 try catch 跨函数工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:01 25 4
gpt4 key购买 nike

我正在用 C 编写一个异常处理库,但遇到了一个问题:

#define TRY do{ jmp_buf ex_buf__; switch( setjmp(ex_buf__) ){ case 0:
#define FINALLY break; } default:
#define CATCH(x) break; case x:
#define ETRY } }while(0)
#define THROW(x) longjmp(ex_buf__, x)

在我当前的 try catch throw 实现中,我无法从 try block 内部调用的方法内部抛出异常,因为 jmp_buf 变量是本地变量。我怎样才能做到这一点?我想到了一个全局变量,但这不允许我嵌套 try catch block 。

最佳答案

您需要使用全局跳转缓冲区,因为它需要对您的“客户”可见。例如,您可以将旧的跳转缓冲区保存在 try block 中,并在使用后恢复它。

不过,一般来说,我根本不推荐这种方法。尝试将功能改进到一种语言中充满了危险,其中最重要的是以下代码:

for ;; { 
TRY {
if (someVar) {
break;
}
}
FINALLY {
doIt()
}
ETRY
}

关于c - C 中的异常处理 - 使 try catch 跨函数工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22095989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com