Mezclar excepciones de C (estructuradas) y de C++

Si desea escribir código portable, no se recomienda utilizar el control de excepciones estructuradas (SEH) en un programa de C++. Sin embargo, puede que a veces desee compilar con /EHa y mezclar excepciones estructuradas y código fuente de C++ estructurado, con lo que necesitará alguna capacidad para controlar ambos tipos de excepciones. Dado que un controlador de excepciones estructuradas no tiene el concepto de objetos ni de excepciones con tipo, no puede controlar las excepciones producidas por código de C++. Sin embargo, los controladores de C++ catch pueden controlar excepciones estructuradas. La sintaxis de control de excepciones de C++ (try, throw, catch) no es aceptada por el compilador de C, pero la sintaxis del control de excepciones estructuradas (__try, __except, __finally) es admitida por el compilador de C++.

Consulte _set_se_translator para obtener información sobre el control de excepciones estructuradas como excepciones de C++.

Si combina excepciones estructuradas y de C++, tenga en cuenta estos posibles problemas:

  • Las excepciones de C++ y las excepciones estructuradas no se pueden mezclar dentro de la misma función.

  • Los controladores de finalización (bloques __finally) se ejecutan siempre, incluso durante el desenredo después de producirse una excepción.

  • El control de excepciones de C++ puede detectar y conservar la semántica de desenredo en todos los módulos compilados con las opciones del compilador /EH, que habilita la semántica de desenredo.

  • Puede que haya situaciones en las que no se llame a las funciones de destructor para todos los objetos. Por ejemplo, se podría producir una excepción estructurada al intentar realizar una llamada de función a través de un puntero de función no inicializado. Si los parámetros de función son objetos construidos antes de la llamada, no se llama a los destructores de esos objetos durante el desenredado de la pila.

Pasos siguientes

Consulte también

Procedimientos recomendados de C++ moderno para las excepciones y el control de errores