TRY / CATCH_ALL vs try / catch - PullRequest
       13

TRY / CATCH_ALL vs try / catch

7 голосов
/ 15 апреля 2010

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

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

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

Я пытался найти это в Google, но "попробовать против TRY" трудно найти.

Ответы [ 4 ]

7 голосов
/ 15 апреля 2010

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

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

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

3 голосов
/ 15 апреля 2010

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

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

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

Эта статья на MSDN содержит более подробную информацию:

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

1 голос
/ 15 апреля 2010

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

0 голосов
/ 30 июля 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...