我希望在使用longjmp/setjmp的C语言中使用可嵌套的try-catch-finally语句实现异常。
我已经设法实现了try-catch-else异常,它们不是嵌套的。我还希望向异常中添加消息。你知道我怎么才能做到吗?
发布于 2009-11-23 04:35:50
Dave Hanson已经在他的优秀著作中完成了一个really nice package of exception macros。你可以批量使用这些代码,也可以学习他的技术。对于任何有相当数量的C编程的人来说,这本书值得一买-它将改变你对C编程的看法,并向你展示如何用C语言进行面向对象的设计。
发布于 2009-11-23 00:50:33
用于嵌套:当前try/catch块的堆栈帧。
您将尝试使用setjmp保存到jmpbuffer (我猜)。如果你已经做了一次尝试,因此现在处于try块的作用域中,并点击了另一次try,那么你想保留现有的jmpbuffer,并创建一个新的- Push --当你捕捉到的时候,你是回到最近一次try的地方,因此你弹出了最新的jmpbuffer。因此,我认为类似堆栈的模型对于嵌套的try/catch是有意义的。
对于实现,我想最简单的方法是保留一个jmpbuffer数组,因此限制了try catch的深度-但要保持简单;Push和Pop只需要跟踪该数组中的索引。
对于消息和其他异常内容,为"currentException“保留区域。
异常内容。保持简单,定义一个异常结构。一个字符数组和一个整型数组。保持简单,但不是太简单,保留它们的数组,以便您可以支持链接。
对于你允许的投掷
throw ( "string", errcode )它简单地将数组结构置零,并生成一个条目。和
catch ( exception )现在可以查看数组并找到第一个条目,然后
throwChain ( "string", errcode)它将新的异常添加到数组中(如果有空间,如果没有空间,则可以根据某些规则(如FIFO)对数组进行混洗)
但是,我不得不问,为什么不直接使用C++呢?
发布于 2009-11-23 00:45:09
好吧,你不能真的在C中实现异常,因为语言不支持它们。您所能做的最好的事情就是使用setjmp和longjmp以及一些非常聪明的宏来模拟它们。
快速搜索会找到这些可能对您有用的链接:
https://stackoverflow.com/questions/1779189
复制相似问题