2010-04-14 89 views
6

我一直在使用C++,而且我很熟悉普通的try/catch。不過,我現在發現自己在Windows上編寫Visual Studio中的COM開發。代碼的幾個部分使用類似的東西:TRY/CATCH_ALL vs try/catch

TRY { 
    ... do stuff 
} CATCH_ALL(e) { 
    ... issue a warning 
} 
END_CATCH_ALL; 

這些宏是什麼意思?他們提供的內置try/catch有什麼好處?

我試過用google搜索這個,但是「嘗試vs嘗試」很難搜索。

回答

7

這是一個MFC宏:
http://msdn.microsoft.com/en-us/library/t8dwzac0%28VS.71%29.aspx

This page說,他們是從MFC 1.0的遺蹟 - 在新代碼普通的C++異常:

MFC版本低於3.0不支持C++異常機制。 MFC提供了宏來處理異常。

+1

但它與使用內置的try/catch相比如何? – Tim 2010-04-14 21:28:06

+1

@Tim:它們只存在,因爲MFC 1.0不支持內置的try/catch。所以只是不要使用它們。看看宏定義,如果你關心它們是如何工作的。 – 2010-04-14 21:29:31

+0

「不要使用它們」聽起來像是正確的道路。不過,從商業的角度來看,微軟給出了同樣的建議嗎?由於他們是MFC的製造者,所以我希望有一個正式的建議來向其他人展示。 – Tim 2010-04-14 21:35:04

1

這是Windows編程的一個人造事件,從編譯器不能很好地支持try/catch的日子開始,或者完全不被支持。

3

你要記住,有使用Visual C++編程時,3種不同類型的異常:

  1. C++異常
  2. 結構化異常(SEH,Windows自帶的異常處理機制)
  3. MFC異常(您提到的那些,不建議用於新代碼但仍可用於向後兼容)

SEH和C++異常機制不應混合使用

這篇文章在MSDN上有更多的細節:

http://msdn.microsoft.com/en-us/library/x057540h.aspx

0

宏是與編譯器的早期版本使用是重要的。它們仍支持與舊代碼的兼容性,但不建議使用。

Exception Handling in Visual C++的文件說,這一下MFC例外:

自從3.0版本,MFC採用了C++異常,但仍然支持其 舊的異常處理的宏,這是類似於C++異常 形式。雖然這些宏不建議用於編程,但仍支持它們以實現向後兼容。在 程序已經使用宏,您也可以自由使用C++ 例外。在預處理過程中,宏從Visual C++ 2.0版開始,對C++語言的Visual C++實現 中定義的異常處理進行處理。在開始使用C++ 異常時,您可以保留現有的異常宏 。