是否有一些用于异常处理的跨平台c库(在C中实现try / catch)?
我也在寻找文档如何在c ++中实现(中断是如何屏蔽的或类似的东西)
答案 0 :(得分:7)
您可以尝试exceptions4c;它是ANSI C中的一个异常处理库,支持:throw
,try
,catch
,finally
以及其他一些好东西。例如,它支持 Dispose模式,因此您可以自动释放资源。您也可以处理信号(例如SIGFPE
和SIGSEGV
),就像它们是例外一样。
它是在setjmp
和longjmp
(标准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...");
}
}