你好,請再次打擾我__try和__exception可移植性
我在閱讀「檢測IA-32體系結構中的多處理器拓撲」。我正在記錄這個例子。不過,我在代碼中讀取了這些句子__try和__except。
我發現MSDN Microsoft網頁的一些信息,但我用gcc編譯器/連接
在GCC __try __except和有效的句子? 在* nux環境中是__try和__except便攜式語句? 確實存在比__try和__except語句更好的模式用於C中的異常處理?
在此先感謝。
你好,請再次打擾我__try和__exception可移植性
我在閱讀「檢測IA-32體系結構中的多處理器拓撲」。我正在記錄這個例子。不過,我在代碼中讀取了這些句子__try和__except。
我發現MSDN Microsoft網頁的一些信息,但我用gcc編譯器/連接
在GCC __try __except和有效的句子? 在* nux環境中是__try和__except便攜式語句? 確實存在比__try和__except語句更好的模式用於C中的異常處理?
在此先感謝。
C標準沒有異常處理支持。 C++的確如此。有很多使用setjmp的try/catch實現。
據MSDN,__try
和__except
是擴展的C語言。因此,它們不能隨身攜帶。
對於某些應用程序,可能使用宏和setjmp
/longjmp
構造來模擬它們的行爲。通常情況並非如此。特別是,MSDN指出
__except
表達式在__try
正文的範圍內執行。
單獨使用宏無法實現。
是
__try
和GCC__except
有效的句子?
不,他們不是,因爲GCC不支持C.
的這個微軟方言是__try __except和便攜式句子上* NUX環境?
不,他們不是,雖然有辦法在* nix上實現類似的異常處理。
確實存在比__try和__except語句更好的模式來處理C語言中的異常?
當您執行異常處理時,有充分的理由使用C++。具有析構函數的C++作用域對象比標準C資源管理在異常情況下更加健壯。因此,雖然有一些爲C提供try
和catch
的實現,但我建議不要這樣做,而是傾向於使用C++。 C++中的異常處理是該標準的一部分,因此受到所有符合標準的編譯器的支持,沒有可移植性問題。
不確切。 C++ try/catch只能處理C++異常。在源代碼中拋出的人。雖然__try/__除了處理任何類型異常的SEH處理程序,都包含null解除引用,除以零以及更多。根據場景和所需的穩健性級別,在Windows上,可能有更好的理由選擇使用C++的SEH處理程序 – meirm
__try和__except是(如Microsoft聲明的)對C/C++語言的擴展。所以它不能在gcc中移植。我認爲微軟將這些內容放在純C中(不使用C++編譯器)可能有類似於異常處理的東西。 * 小號 * tructured * Ë * xception * ^h * andling(SEH)是相當低的水平,而據我所記得的,甚至微軟自己的C++異常處理引擎蓋下使用SEH。
我認爲整個事情是,如果你看到__try和__except,只需用try和catch代替它,然後用C++編譯器編譯即可。您當然必須更換傳遞給__except的過濾器,但這不是什麼大問題。
C++異常並不是在Microsoft C中使用__try/__ catch/etc捕獲的異常類型。前者是語言異常,後者是CPU異常(請參閱SEH,MSDN上的結構化異常處理)。 –