Compartir a través de


Mezclar excepciones de C (Estructurado) y C++

Si desea escribir código más portable, no se recomienda utilizar el control de excepciones estructuradas 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 catch de C++ pueden controlar excepciones estructuradas. Como tal, 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++.

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

Si mezcla excepciones estructuradas y de C++, tenga en cuenta lo siguiente:

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

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

  3. El control de excepciones de C++ puede detectar y conservar la semántica de desenredo en todos los módulos compilados con la opción del compilador /EH (esta opción habilita la semántica de desenredo).

  4. Puede que haya situaciones en las que no se llame a las funciones de destructor para todos los objetos. Por ejemplo, si una excepción estructurada se produce al intentar realizar una llamada de función a través de un puntero de función inicializado, y esa función toma como parámetros objetos que se construyeron antes de la llamada, no se llamará a los destructores de esos objetos durante el desenredo de la pila.

¿Qué más desea saber?

Vea también

Referencia

Control de excepciones de C++