Q
純C異常處理庫
3
A
回答
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中的一個異常處理庫,支持:throw
,try
,catch
,finally
以及其他一些好東西。例如,它支持配置模式,因此您可以自動釋放資源。您也可以處理信號(如SIGFPE
和SIGSEGV
),就好像它們是例外情況一樣。
它在setjmp
和longjmp
(標準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...");
}
}
相關問題
- 1. 異常純C處理
- 2. C#類庫異常處理
- 3. C++異常處理
- 4. C++異常處理
- 5. C++處理異常
- 6. 異常處理C++
- 7. C++異常處理
- 8. C#異常處理
- 9. CMD異常處理C/C++
- 10. c異常處理sql異常#
- 11. python異常與C++異常處理
- 12. 庫中的異常處理
- 13. 處理數據庫異常
- 14. C++異常處理失敗
- 15. C#自動異常處理
- 16. C++構造異常處理
- 17. C++異常處理查詢
- 18. C++何時處理異常
- 19. PHP異常處理vs C#
- 20. 未處理的異常(C++)
- 21. C#ThreadPool QueueUserWorkItem異常處理
- 22. c#類的異常處理
- 23. 異常處理在c#
- 24. Objective-C異常處理
- 25. 處理AccessViolation異常C#
- 26. C#異常處理類
- 27. 異常處理:多次處理異常
- 28. php異常處理異常
- 29. 異常處理
- 30. 異常處理
@Tim是的,C++ trows異常和C沒有,因此他尋找一個庫在C中實現相同。我沒有看到這裏很難理解。 –
有這篇文章:http://www.on-time.com/ddj0011.htm和這個http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html – xanatos
@ChristianRau我重讀它又多了幾次,最後看到了你所看到的。做了一些編輯,對於噪音感到抱歉(但最初很難理解) –