纯C中的异常处理库

时间:2011-10-05 12:30:16

标签: c exception

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

我也在寻找文档如何在c ++中实现(中断是如何屏蔽的或类似的东西)

5 个答案:

答案 0 :(得分:7)

您可以尝试exceptions4c;它是ANSI C中的一个异常处理库,支持:throwtrycatchfinally以及其他一些好东西。例如,它支持 Dispose模式,因此您可以自动释放资源。您也可以处理信号(例如SIGFPESIGSEGV),就像它们是例外一样。

它是在setjmplongjmp(标准C库)之上实现的,它是免费软件,因此您可以阅读和修改源代码。

哦,顺便说一下,我是作者:)请看看它,并将其与other alternatives进行比较,看看哪个最适合你。

答案 1 :(得分:3)

实现与C ++异常处理类似结果的一种方法是使用setjmp和longjmp。请参阅维基百科页面以获取一个简单的示例:http://en.wikipedia.org/wiki/Setjmp.h。查看Lua解释器的源代码,了解真实示例。

请注意,这不是try / catch的真正实现,因为您可以从C ++调用库并获得真正的异常。

答案 2 :(得分:0)

XXL就是这样一个图书馆。

答案 3 :(得分:0)

OSSP ex库似乎满足您的要求。它利用上下文切换功能,并且是线程安全的。与所有OSSP组件一样,编写良好并具有文档记录。

答案 4 :(得分: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...");
    }
}