Condividi tramite


/EH (Modello di gestione delle eccezioni)

Aggiornamento: Luglio 2008

Specifica il modello di gestione delle eccezioni che deve essere utilizzato dal compilatore ed elimina gli oggetti C++ che non rientrano nell'area di validità come risultato dell'eccezione. Se /EH non viene specificato, il compilatore intercetterà le eccezioni strutturate e C++ ma non eliminerà gli oggetti C++ che non rientrano nell'area di validità come risultato dell'eccezione.

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

Argomenti

  • a
    Il modello di gestione delle eccezioni intercetta le eccezioni asincrone (strutturate) e sincrone (C++).

  • s
    Modello di gestione delle eccezioni che intercetta le sole eccezioni C++ e fa in modo che il compilatore presupponga che le funzioni C extern generino un'eccezione.

  • c
    Se utilizzato con s (/EHsc), intercetta le sole eccezioni C++ e fa in modo che il compilatore presupponga che le funzioni C extern non generino mai un'eccezione C++. /EHca equivale a /EHa.

Note

Utilizzare /EHs per specificare il modello di gestione delle eccezioni sincrone (gestione delle eccezioni C++ senza eccezioni di gestione delle eccezioni strutturate). Se si utilizza /EHs, la clausola catch non intercetterà le eccezioni asincrone. In Visual C++ 2005, inoltre, nessuno degli oggetti presenti nell'ambito al momento della generazione dell'eccezione asincrona verrà eliminato, anche se l'eccezione viene gestita. In /EHs, catch(...) intercetterà solo le eccezioni C++. Non verranno intercettate le violazioni di accesso, né le eccezioni System.Exception.

Utilizzare /EHa per specificare il modello di gestione delle eccezioni asincrone (gestione delle eccezioni C++ con eccezioni di gestione delle eccezioni strutturate). /EHa può determinare una riduzione nelle prestazioni dell'immagine perché il compilatore non ottimizzerà completamente un blocco try, anche se non rileva alcuna istruzione throw.

Utilizzare /EHa se si desidera intercettare le eccezioni generate con istruzioni diverse da throw. Nell'esempio seguente viene generata un'eccezione:

// 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;
   }
}

Per l'opzione /EHc è necessario che sia specificata /EHs o /EHa. L'utilizzo /clr (Compilazione Common Language Runtime) implica /EHa (/clr /EHa è ridondante). Il compilatore genererà un errore se /EHs[c] viene utilizzato dopo /clr. Le ottimizzazioni non influiranno su questo comportamento. All'intercettazione di un'eccezione, il compilatore richiamerà il distruttore della classe e i distruttori per gli oggetti inclusi nello stesso ambito dell'eccezione. Se l'eccezione non viene intercettata, i distruttori non verranno eseguiti.

Vedere _set_se_translator per i limiti della gestione delle eccezioni in /clr.

L'opzione può essere chiusa dal simbolo -. Ad esempio, /EHsc- viene interpretato come /EHs /EHc- ed è equivalente a /EHs.

Per ulteriori informazioni, vedere Exception Handling: Default Synchronous Exception Model.

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Procedura: aprire le pagine delle proprietà dei progetti.

  2. Fare clic sulla cartella C/C++.

  3. Fare clic sulla pagina delle proprietà Generazione codice.

  4. Modificare la proprietà Attiva eccezioni C++.

In alternativa, attenersi alla procedura seguente:

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Fare clic sulla cartella C/C++.

  2. Fare clic sulla pagina delle proprietà Generazione codice.

  3. Impostare Attiva eccezioni C++ su No.

  4. Fare clic sulla pagina delle proprietà Riga di comando.

  5. Digitare l'opzione del compilatore nella casella Opzioni aggiuntive.

Per impostare l'opzione del compilatore a livello di codice

Vedere anche

Riferimenti

Opzioni del compilatore

Impostazione delle opzioni del compilatore

Exception Specifications

Cronologia delle modifiche

Date

History

Motivo

Luglio 2008

Revisione della descrizione delle modalità con cui l'opzione /EHa può produrre un'immagine che riduce le prestazioni. Aggiunta un'istruzione finale nel blocco try dell'esempio per impedire un'ottimizzazione indesiderata.

Miglioramento delle informazioni.