2010-04-14 13 views
6

He estado usando C++ por un tiempo, y estoy familiarizado con try/catch normal. Sin embargo, ahora me encuentro en Windows, codificando en VisualStudio para desarrollo COM. Varias partes del código usan cosas como:TRY/CATCH_ALL vs try/catch

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

¿Cuál es el punto de estas macros? ¿Qué beneficio ofrecen sobre el try/catch incorporado?

He intentado googlear esto, pero "try vs TRY" es difícil de buscar.

Respuesta

7

Es una macro MFC:
http://msdn.microsoft.com/en-us/library/t8dwzac0%28VS.71%29.aspx

This page dice que son un remanente de MFC 1.0 - usar excepciones normales C++ en el nuevo código:

versiones MFC inferiores a 3,0 no apoyaron la Mecanismo de excepción C++. MFC proporcionó macros para hacer frente a las excepciones.

+1

pero, ¿cómo se compara con el uso del try/catch incorporado? – Tim

+1

@Tim: solo existen porque MFC 1.0 no es compatible con el try/catch incorporado. Entonces no los use. Eche un vistazo a las definiciones macro si le interesa ver cómo funcionan. –

+0

"No los uses" suena como el camino correcto. Sin embargo, desde una perspectiva comercial (lo siento), ¿es ese el mismo consejo que da Microsoft? Ya que son los creadores de MFC, me gustaría tener una recomendación oficial para presentar a los demás. – Tim

1

Es un artefacto de la programación de Windows desde antes de los días en que try/catch no estaba bien soportado por los compiladores, o no era compatible en absoluto.

3

Usted querrá tener en cuenta que hay 3 tipos diferentes de excepciones en la programación con Visual C++:

  1. C++ excepciones
  2. excepciones estructurado (SEH, propio mecanismo de excepciones de Windows')
  3. excepciones MFC (aquellos que mencionas, que no se recomienda para el nuevo código, pero todavía se puede utilizar para la compatibilidad hacia atrás)

SEH y C++ mecanismos de excepción no debe mezclarse.

este artículo en MSDN tiene más detalles:

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

0

Las macros son importantes para su uso con una versión anterior del compilador. Todavía son compatibles con la compatibilidad con el código heredado, pero de lo contrario no se recomiendan para su uso.

La documentación para Exception Handling in Visual C++ dice esto acerca de las excepciones de MFC:

Desde la versión 3.0, MFC ha utilizado excepciones de C++, pero todavía apoya sus más viejos macros manejo de excepciones, que son similares a C++ excepciones en forma. Aunque estas macros no se recomiendan para la nueva programación , todavía son compatibles con la compatibilidad con versiones anteriores. En los programas que ya usan las macros, también puede usar libremente las excepciones C++ . Durante el preprocesamiento, las macros evalúan las palabras clave de manejo de excepciones definidas en la implementación de Visual C++ del lenguaje C++ a partir de Visual C++ versión 2.0. Puede dejar macros de excepción existentes en su lugar mientras comienza a usar C++ excepciones.

Cuestiones relacionadas