Condividi tramite


Sintassi del gestore eccezioni

Le parole chiave __try e __except vengono usate per costruire un gestore di eccezioni basato su frame. Nell'esempio seguente viene illustrata la struttura di un gestore eccezioni.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Si noti che il blocco __try e il blocco del gestore eccezioni richiedono parentesi graffe ({}). L'uso di un'istruzione goto per passare al corpo di un blocco __try o in un blocco del gestore eccezioni non è consentito. Questa regola si applica sia ai gestori di eccezioni che ai gestori di terminazione.

Il blocco __try contiene il corpo sorvegliato del codice protetto protetto dal gestore eccezioni. Una funzione può avere un numero qualsiasi di gestori di eccezioni e queste istruzioni di gestione delle eccezioni possono essere annidate all'interno della stessa funzione o in funzioni diverse. Se si verifica un'eccezione all'interno del blocco __try , il sistema assume il controllo e avvia la ricerca di un gestore eccezioni. Per una descrizione dettagliata di questa ricerca, vedere Gestione delle eccezioni.

Il gestore eccezioni riceve solo eccezioni che si verificano all'interno di un singolo thread. Ciò significa che se un blocco __try contiene una chiamata alla funzione CreateProcess o CreateThread, le eccezioni che si verificano all'interno del nuovo processo o thread non vengono inviate a questo gestore.

Il sistema valuta l'espressione di filtro di ogni gestore eccezioni che protegge il codice in cui si è verificata l'eccezione fino a quando l'eccezione non viene gestita o non sono presenti più gestori. Un'espressione di filtro deve essere valutata come uno dei tre valori seguenti.

Valore Significato
EXCEPTION_EXECUTE_HANDLER Il sistema trasferisce il controllo al gestore eccezioni e l'esecuzione continua nello stack frame in cui viene trovato il gestore.
EXCEPTION_CONTINUE_edizione Standard ARCH Il sistema continua a cercare un gestore.
EXCEPTION_CONTINUE_EXECUTION Il sistema arresta la ricerca di un gestore e restituisce il controllo al punto in cui si è verificata l'eccezione. Se l'eccezione non è contigua, viene generata un'eccezione EXCEPTION_NONCONTINUABLE_EXCEPTION .

 

L'espressione di filtro viene valutata nel contesto della funzione in cui si trova il gestore eccezioni, anche se l'eccezione potrebbe essersi verificata in una funzione diversa. Ciò significa che l'espressione di filtro può accedere alle variabili locali della funzione. Analogamente, il blocco del gestore eccezioni può accedere alle variabili locali della funzione in cui si trova.

Per altri esempi, vedere Uso di un gestore eccezioni.

Per altre informazioni sulle espressioni di filtro e sulle funzioni di filtro, vedere Gestione delle eccezioni basata su frame.