2010-08-27 87 views
5

Linux是否提供C中的異常處理而不使用C++?或者,什麼可能是實現這種異常處理的最佳方式?目標是避免檢查每個調用的函數的返回碼,但要做一些類似於C++的線程安全且便於攜帶的操作。在C中沒有C++的異常處理在Linux中

+8

真正的男人使用setjmp()/ longjmp()。 – 2010-08-27 06:28:34

+0

謝謝,會檢查出來。如下所示,使用setjmp/longjmp over信號有沒有優勢/劣勢? – stefangachter 2010-08-27 06:56:06

回答

3

我從來沒有聽說過的Linux提供了這樣的事情,但這個頁面描述了一個第三方的異常處理庫爲C:http://www.on-time.com/ddj0011.htm我一直沒能找到下載鏈接,但。

+0

謝謝,同時我偶然發現了同一個網站,但都找不到源代碼。 – stefangachter 2010-08-27 06:59:28

+0

在這裏,是關於excation處理的一些一般想法和對上述實現的評論:http://landheer-cieslak.com/wordpress/error-handling-in-c/ – stefangachter 2010-08-27 07:36:55

7

您可以通過爲其編寫信號處理程序來處理信號。 在GNU中記錄的這些信號中有一些是:

  • 程序錯誤信號:用於報告嚴重的程序錯誤。
  • 終止信號:用於中斷和/或終止程序。
  • 警報信號:用於指示定時器到期。
  • 異步I/O信號:用於指示輸入可用。
  • 作業控制信號:用於支持作業控制的信號。
  • 操作錯誤信號:用於報告操作系統錯誤。
  • 其他信號:雜項信號。
  • 信號消息:打印描述的信號

你可以在深入瞭解這個here更多信息的消息。 它說,我想下面是你在找什麼:

如果預計會導致信號的情況下,你可以定義一個處理 功能,並告訴操作系統上運行的時候,那個特定類型 的信號到達。

+0

感謝您的提示。你知道一些使用信號進行表達式處理的示例代碼嗎? – stefangachter 2010-08-27 07:00:25

+0

如果您閱讀我的文章中的鏈接,有示例代碼。 – 2010-08-27 07:04:48

1

Offtopic可能,但我無法抗拒它,對不起。我必須說,迄今爲止我所見過的唯一真正優秀和全面的異常機制是Windows中的SEH結構異常處理。它打擊了C++異常處理模型(當堆棧展開期間異常處於自動對象的析構函數中時引發了這種異常處理模型)。

加上它是一個非常統一的異常處理,因爲它結合了軟件異常和硬件生成的異常。

因此,如果您想要異常處理 - 無論是爲Windows編寫,還是爲Linux實現類似的東西。

P.S.與許多人認爲的不同,異常處理是:使用jmp中斷正常的程序流程,遠遠超過

這也是一個關於誰和如何處理異常的談判鏈。這是(最重要的) - 正確的清理執行在每個範圍,處理嵌套的異常和等

1

我可以建議你看看我的圖書館exceptions4c?它已在Linux上進行過測試,並具有許多功能,例如finally塊,信號處理和一種多態性,它允許您創建異常層次結構。它也支持多線程。