TRY / CATCH_ALL vs try / catch

Я использую c ++ некоторое время, и я знаком с обычным try / catch. Тем не менее, теперь я нахожусь на Windows, кодируя в VisualStudio для разработки COM. В некоторых частях кода используются такие вещи, как:

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

В чем смысл этих макросов? Какую пользу они могут предложить по встроенному try / catch?

Я пробовал это, но «try vs TRY» сложно найти.

Это макрос MFC:
http://msdn.microsoft.com/en-us/library/t8dwzac0%28VS.71%29.aspx

На этой странице говорится, что они являются остатком от MFC 1.0 – используйте обычные C ++ исключения в новом коде:

Варианты MFC ниже 3.0 не поддерживали механизм исключения C ++. MFC предоставил macros для устранения исключений.

Вы хотите иметь в виду, что при программировании с Visual C ++ существует 3 разных вида исключений:

  1. Исключения C ++
  2. Структурированные исключения (SEH, собственный механизм исключения Windows)
  3. Исключения MFC (те, которые вы упомянули, которые не рекомендуются для нового кода, но все еще могут использоваться для обратной совместимости)

Механизмы исключения SEH и C ++ не должны смешиваться .

В этой статье на MSDN есть более подробная информация:

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

Это артефакт программирования Windows, прежде чем дни, когда try / catch не были хорошо поддержаны компиляторами или вообще не поддерживались.

Макросы были важны для использования с более ранней версией компилятора. Они по-прежнему поддерживаются для совместимости с устаревшим кодом, но в противном случае они не рекомендуются для использования.

Документация по обработке исключений в Visual C ++ говорит об исключениях MFC:

Начиная с версии 3.0, MFC использует исключения C ++, но по-прежнему поддерживает свои старые macros обработки исключений, которые аналогичны исключениям C ++ в форме. Хотя эти macros не рекомендуются для нового программирования, они по-прежнему поддерживаются для обратной совместимости. В программах, которые уже используют macros, вы также можете свободно использовать исключения C ++. Во время предварительной обработки macros оценивают ключевые слова обработки исключений, определенные в реализации Visual C ++ языка C ++, как Visual C ++ версии 2.0. Вы можете оставить существующие macros исключения, пока вы начинаете использовать исключения C ++.