Condividi tramite


try-finally un'istruzione (C)

Specifici di Microsoft

try-finally l'istruzione è un'estensione Microsoft per il linguaggio C che consente alle applicazioni garantire l'esecuzione del codice di pulitura quando l'esecuzione di un blocco di codice viene interrotta.La pulizia è costituito da tali attività come il rilascio della memoria, la chiusura dei file e rilasciando handle di file.try-finally l'istruzione è particolarmente utile per le routine che presentano vari punti in cui un controllo viene eseguito per un errore che potrebbe causare un ritorno prematuro dalla routine.

  • prova-finale-rendiconto:
    __try composto-rendiconto

    __finally composto-rendiconto

L'istruzione composto dopo __try la clausola rappresenta la sezione accessibile.L'istruzione composto dopo __finally la clausola è il gestore di terminazione.Il gestore specifica un insieme di azioni da eseguire quando la sezione accessibile è uscita, se la sezione accessibile è uscita da un'eccezione (anomala) o dal passaggio standard (terminazione normale).

Il controllo raggiunge un oggetto __try istruzione dall'esecuzione sequenziale semplice (passaggio).Quando il controllo passa in __try l'istruzione, il relativo gestore associato diventa attivo.l'esecuzione continua come segue:

  1. La sezione accessibile viene eseguita.

  2. Il gestore di terminazione viene richiamato.

  3. Quando il gestore di terminazione completa, l'esecuzione continuerà a __finally istruzione.Indipendentemente dalla sezione accessibile termina, ad esempio tramite un oggetto goto istruzione dal corpo custodetto o tramite un oggetto return l'istruzione), il gestore di terminazione viene eseguito prima che il flusso di controllo viene spostato dalla sezione accessibile.

__leave la parola chiave è valida all'interno di un oggetto try-finally blocco di istruzioni.l'effetto di __leave è passare alla fine di l try-finally blocco.Il gestore di terminazione immediatamente viene eseguito.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-finally istruzione utilizzando un oggetto return istruzione o longjmp la funzione in runtime viene considerata anomala.Non è consentito passare a __try istruzione, ma valido uscire da uno.tutti __finally le istruzioni attive tra il punto di partenza e la destinazione devono essere eseguiti.Si tratta di una “rimozione locale„.

Il gestore di terminazione non viene chiamato se un processo venga arrestato quando esegue un oggetto try-finally istruzione.

[!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++.

Vedere l'esempio relativo a try-except l'istruzione per vedere come try-finally funzionamento dell'istruzione.

Microsoft FINALE specifico

Vedere anche

Riferimenti

try-finally istruzione