try-except l'istruzione (C)
Specifici di Microsoft
try-except l'istruzione è un'estensione Microsoft per il linguaggio C che consente alle applicazioni ottenere il controllo di un programma quando gli eventi che generalmente prevede l'esecuzione si verificano.Tali eventi vengono chiamati eccezioni e il meccanismo che gli unit con le eccezioni viene chiamato gestione delle eccezioni strutturata.
Le eccezioni possono essere hardware o basato su software.Anche quando le applicazioni non è completamente recuperare le eccezioni hardware o software, la gestione delle eccezioni strutturata consente di visualizzare informazioni sugli errori e applicare l'abbondanza allo stato interno dell'applicazione consentono di diagnosticare il problema.Questo risulta particolarmente utile per i problemi saltuari che non possono essere riprodotti facilmente.
Sintassi
prova-eccetto-rendiconto:
__try composto-rendiconto__except ( espressione ) composto-rendiconto
L'istruzione composto dopo __try la clausola rappresenta la sezione accessibile.L'istruzione composto dopo __except la clausola è il gestore di eccezioni.Il gestore specifica un set di azioni da intraprendere se viene generata un'eccezione durante l'esecuzione della sezione accessibile.l'esecuzione continua come segue:
La sezione accessibile viene eseguita.
Se alcuna eccezione si verifica durante l'esecuzione della sezione accessibile, l'esecuzione continuerà all'istruzione successiva a __except clausola.
Se si verifica un'eccezione durante l'esecuzione della sezione accessibile o in qualsiasi routine la sezione accessibile chiama,__except l'espressione viene valutata e il valore restituito determina come l'eccezione non è gestita.Esistono tre valori:
EXCEPTION_CONTINUE_SEARCH L'eccezione non è stata riconosciuta.Continuare la ricerca nello stack un gestore, anzitutto contenere try-except istruzioni, quindi per i gestori con la precedenza più elevata successivo.
EXCEPTION_CONTINUE_EXECUTION L'eccezione viene riconosciuta ma chiusa.Continuare l'esecuzione nel punto in cui si è verificata l'eccezione.
EXCEPTION_EXECUTE_HANDLER L'eccezione viene riconosciuta.Controllo di trasferimento al gestore di eccezioni esecuzione __except l'istruzione composto, quindi continua l'esecuzione nel punto in cui si è verificata l'eccezione.
Poiché __except l'espressione viene valutata come espressione di tipo c, è limitata a un singolo valore, l'operatore di espressione condizionale, o dell'operatore virgola.Se l'elaborazione più estesa è necessaria, l'espressione può chiamare una routine che restituisce uno dei tre valori sopra elencati.
[!NOTA]
Attività di gestione delle eccezioni strutturata con i file di origine c e C++.Tuttavia, in particolare non è progettata per C++.È possibile assicurarsi che il codice è più portabile tramite la gestione delle eccezioni C++.Inoltre, il meccanismo di gestione delle eccezioni C++ è molto più flessibile, in quanto può gestire le eccezioni di qualsiasi tipo.
[!NOTA]
Per i programmi C++, la gestione delle eccezioni C++ deve essere utilizzata al posto di gestione delle eccezioni strutturata.Per ulteriori informazioni, vedere Gestione delle eccezioni in Riferimenti al linguaggio C++.
Ogni routine in un'applicazione può disporre di un gestore di eccezioni.__except l'espressione consente sottoposta a __try corpo.Ciò significa che ha accesso a tutte le variabili locali dichiarate in.
__leave la parola chiave è valida all'interno di un oggetto try-except blocco di istruzioni.l'effetto di __leave è passare alla fine di l try-except blocco.L'esecuzione riprende dopo la fine del gestore di eccezioni.sebbene a goto l'istruzione consente di ottenere lo stesso risultato, a goto l'istruzione provoca la rimozione dello stack.__leave l'istruzione è più efficiente perché non comporta la rimozione dello stack.
Uscire da a try-except istruzione utilizzando il longjmp la funzione in runtime viene considerata anomala.Non è consentito passare a __try istruzione, ma valido uscire da uno.Il gestore eccezioni non viene chiamato se un processo venga arrestato nel mezzo di eseguire un oggetto try-except istruzione.
Esempio
Di seguito è riportato un esempio di un gestore eccezioni e di un gestore di terminazione.vedere Try-finally l'istruzione per ulteriori informazioni sui gestori di terminazione.
.
.
.
puts("hello");
__try{
puts("in try");
__try{
puts("in try");
RAISE_AN_EXCEPTION();
}__finally{
puts("in finally");
}
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
puts("in except");
}
puts("world");
Si tratta dell'output dell'esempio, con il commento aggiunto a destra:
hello
in try /* fall into try */
in try /* fall into nested try */
in filter /* execute filter; returns 1 so accept */
in finally /* unwind nested finally */
in except /* transfer control to selected handler */
world /* flow out of handler */
Microsoft FINALE specifico