/EH (Modello di gestione delle eccezioni)
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 C non generino mai un'eccezione C++. /EHca è equivalente 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. 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
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Procedura: aprire le pagine delle proprietà dei progetti.
Fare clic sulla cartella C/C++.
Fare clic sulla pagina delle proprietà Generazione codice.
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
Fare clic sulla cartella C/C++.
Fare clic sulla pagina delle proprietà Generazione codice.
Impostare Attiva eccezioni C++ su No.
Fare clic sulla pagina delle proprietà Riga di comando.
Digitare l'opzione del compilatore nella casella Opzioni aggiuntive.
Per impostare l'opzione del compilatore a livello di codice
- Vedere ExceptionHandling.