纯C异常处理库

5

有没有一些跨平台的C库用于异常处理(实现C中的try/catch)?

我还在寻找关于C++中如何实现它的文档(如何屏蔽中断之类的内容)。


2
@Tim 是的,C++ 会抛出异常,而 C 不会,因此他正在寻找一个在 C 中实现相同功能的库。我不明白这里有什么难以理解的。 - Christian Rau
3
好的,我会尽力进行翻译。下面是需要翻译的内容:There was this article: http://www.on-time.com/ddj0011.htm and this http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html这有一篇文章:http://www.on-time.com/ddj0011.htm 和另一篇 http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html。 - xanatos
@ChristianRau 我又重新读了几遍,终于看到了你看到的东西。做了一些修改,抱歉给你带来困扰(但最初确实很难理解)。 - Tim Post
谷歌搜索“c异常处理库”似乎会得到一些可能的结果。 - larsks
非常感谢。我已经实现了异常处理的小程序,现在我明白了它是如何工作的。 - qmor
5个回答

9
你可以尝试使用exceptions4c,它是一个在ANSI C中支持throwtrycatchfinally等功能的异常处理库,并且还支持Dispose模式,因此你可以自动释放资源。同时,它还可以像处理异常一样处理信号(如SIGFPESIGSEGV)。
该库基于标准C库的setjmplongjmp实现,是免费软件,因此你可以阅读和修改源代码。
顺便说一下,我就是该库的作者 :) 请查看它,并与其他替代方案进行比较,看看哪个更适合你。

3

实现类似C++异常处理的另一种方式是使用setjmp和longjmp。参见维基百科页面中的一个简单示例:http://en.wikipedia.org/wiki/Setjmp.h。查看Lua解释器的源代码可以了解实际应用。请注意,这不是真正意义上的try/catch实现,您无法从C++中调用库并获得真正的异常。


1

XXL就是其中一个库。


1

OSSP ex 库似乎能够满足您的需求。它利用了上下文切换功能,并且是线程安全的。像所有 OSSP 组件一样,它编写和文档都很好。


0

试试这个。

#define TRY         char *__exc_message = NULL; do
#define THROW(exc)  { __exc_message = exc; break; }
#define CATCH(exc)  while(0); if(__exc_message != NULL) { exc = __exc_message;
#define FINALLY     }

void Test(int a, int b)
{
    char *exc = NULL;

    TRY
    {
        if(a < b) THROW("A < B!");
        if(a > b) THROW("A > B!");

        TRACE_INFO("Ok :-)");
    }  
    CATCH(exc)
    {
        TRACE_ERROR(exc);
    }
    FINALLY
    {
        TRACE_INFO("Finally...");
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接