/EH (Modelo de control de excepciones)

Especifica el modelo del control de excepciones que debe utilizar el compilador y destruye los objetos de C++ que estarán fuera de ámbito como resultado de la excepción.Si no se especifica /EH, el compilador capturará las excepciones estructuradas y de C++ pero no destruirá los objetos de C++ que estén fuera de ámbito como resultado de la excepción.

/EH{s|a}[c][-]

Argumentos

  • a
    El modelo de control de excepciones que captura las excepciones asincrónicas (estructuradas) y sincrónicas (de C++).

  • s
    El modelo de control de excepciones que sólo detecta las excepciones de C++ e indica al compilador que asuma que las funciones extern de C sí generan una excepción.

  • c
    Si se utiliza con s (/EHsc), captura solo las excepciones de C++ e indica al compilador que dé por supuesto que las funciones extern de C jamás inician una excepción de C++./EHca es equivalente a /EHa.

Comentarios

Use /EHs para especificar el modelo de control sincrónico de excepciones (control de excepciones de C++ sin excepciones del control estructurado de excepciones).Si utiliza /EHs, la cláusula catch no detectará excepciones asincrónicas.Además, todos los objetos en el ámbito cuando se genera la excepción asincrónica no se destruirán aun cuando se controle la excepción asincrónica.En /EHs, catch(...) sólo detectará excepciones de C++.Las infracciones de acceso y excepciones System.Exception no se detectarán.

Use /EHa para especificar el modelo de control asincrónico de excepciones (control de excepciones de C++ con excepciones del control estructurado de excepciones)./EHa puede resultar en una imagen de menor rendimiento porque el compilador no optimizará un bloque try con tanta determinación, incluso cuando el compilador no vea un throw.

Utilice /EHa si desea detectar una excepción producida por un método distinto de throw.En el ejemplo siguiente, se genera una excepción:

// compiler_options_EHA.cpp
// compile with: /EHa
#include <iostream>
#include <excpt.h>
using namespace std;

void fail() {   // generates SE and attempts to catch it using catch(...)
   try {
      int i = 0, j = 1;
      j /= i;   // This will throw a SE (divide by zero).
      printf("%d", j); 
   }
   catch(...) {   // catch block will only be executed under /EHa
      cout<<"Caught an exception in catch(...)."<<endl;
   }
}

int main() {
   __try {
      fail(); 
   }

   // __except will only catch an exception here
   __except(EXCEPTION_EXECUTE_HANDLER) {   
   // if the exception was not caught by the catch(...) inside fail()
      cout << "An exception was caught in __except." << endl;
   }
}

La opción /EHc requiere que se haya especificado /EHs o /EHa.El uso de /clr (Compilación de Common Language Runtime) implica /EHa (/clr /EHa es redundante).El compilador generará un error si se utiliza /EHs[c] detrás de /clr.Las optimizaciones no afectarán a este comportamiento.Cuando se detecta una excepción, el compilador invoca al destructor o a los destructores de clase correspondientes a los objetos que están en el mismo ámbito que la excepción.Si no se detecta ninguna excepción, no se ejecutan estos destructores.

Vea en _set_se_translator las restricciones del control de excepciones en /clr.

La opción puede eliminarse con el símbolo -.Por ejemplo, /EHsc- se interpreta como /EHs /EHc- y es equivalente a /EHs.

Para obtener más información, consulte Synchronous Exception Handling.

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto.Para obtener información detallada, vea Cómo: Abrir páginas de propiedades del proyecto.

  2. Haga clic en la carpeta C/C++.

  3. Haga clic en la página de propiedades Generación de código.

  4. Modifique la propiedad Habilitar excepciones de C++.

Como alternativa, puede utilizar el procedimiento siguiente:

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Haga clic en la carpeta C/C++.

  2. Haga clic en la página de propiedades Generación de código.

  3. Establezca Habilitar excepciones de C++ en No.

  4. Haga clic en la página de propiedades Línea de comandos.

  5. Escriba la opción del compilador en el cuadro Opciones adicionales.

Para establecer esta opción del compilador mediante programación

Vea también

Referencia

Opciones del compilador

Establecer las opciones del compilador

Especificaciones de excepciones