2011-10-05 234 views
3

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

我也在寻找文档它是如何在C实现++(如何中断被屏蔽或者是这样的)

+2

@Tim是的,C++ trows异常和C没有,因此他寻找一个库在C中实现相同。我没有看到这里很难理解。 –

+3

有这篇文章:http://www.on-time.com/ddj0011.htm和这个http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html – xanatos

+0

@ChristianRau我重读它又多了几次,最后看到了你所看到的。做了一些编辑,对于噪音感到抱歉(但最初很难理解) –

回答

3

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

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

0

XXL就是这样一个库。

0

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

7

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

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

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

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..."); 
    } 
}