Condividi tramite


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:

  1. La sezione accessibile viene eseguita.

  2. Se alcuna eccezione si verifica durante l'esecuzione della sezione accessibile, l'esecuzione continuerà all'istruzione successiva a __except clausola.

  3. 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

Vedere anche

Riferimenti

try-except l'istruzione