Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Specifico di Microsoft
L'istruzione try-finally è un'estensione Microsoft del linguaggio C che consente alle applicazioni di garantire l'esecuzione del codice di pulizia quando l'esecuzione di un blocco di codice viene interrotta. La pulizia è costituita da attività come deallocazione della memoria, chiusura di file e rilascio di handle di file. L'istruzione try-finally è particolarmente utile per le routine con diverse posizioni in cui viene eseguito un controllo per un errore che potrebbe causare un ritorno prematuro dalla routine.
try-finally-statement:
__trycompound-statement__finallycompound-statement
L'istruzione composta dopo la __try clausola è la sezione sorvegliata. L'istruzione composta dopo la __finally clausola è il gestore di terminazione. Il gestore specifica un set di azioni eseguite quando la sezione sorvegliata viene chiusa. Non importa se la sezione sorvegliata viene chiusa da un'eccezione (terminazione anomala) o da standard fall through (terminazione normale).
Il controllo raggiunge un'istruzione __try tramite un'esecuzione sequenziale semplice (fall-through). Quando il controllo entra nell'istruzione __try , il gestore associato diventa attivo. L'esecuzione procede come segue:
Viene eseguita la sezione sorvegliata.
Viene richiamato il gestore di terminazione.
Al termine del gestore di terminazione, l'esecuzione continua dopo l'istruzione
__finally. Indipendentemente dal modo in cui la sezione sorvegliata termina (ad esempio, tramite un'istruzionegotofuori dal corpo sorvegliato o tramite un'istruzionereturn), il gestore di terminazione viene eseguito prima che il flusso di controllo si muova fuori dalla sezione sorvegliata.
La __leave parola chiave è valida all'interno di un blocco di try-finally istruzioni. L'effetto di __leave è passare alla fine del try-finally blocco. Il gestore di terminazione viene eseguito immediatamente. Anche se un'istruzione goto può essere usata per ottenere lo stesso risultato, un'istruzione goto causa la rimozione dello stack. L'istruzione __leave è più efficiente perché non comporta la rimozione dello stack.
L'uscita da un'istruzione try-finally tramite un'istruzione return o la longjmp funzione di runtime è considerata terminazione anomala. Non è legale saltare in una __try dichiarazione, ma legale per saltare fuori di uno. Tutte le __finally istruzioni attive tra il punto di partenza e la destinazione devono essere eseguite. Si chiama rimozione locale.
Il gestore di terminazione non viene chiamato se un processo viene terminato durante l'esecuzione di un'istruzione try-finally .
Annotazioni
La gestione strutturata delle eccezioni funziona con i file di origine C e C++. Tuttavia, non è progettato specificamente per C++. Per i programmi C++ portatili, è consigliabile usare la gestione delle eccezioni C++ anziché la gestione strutturata delle eccezioni. Inoltre, il meccanismo di gestione delle eccezioni C++ è molto più flessibile, in quanto può gestire le eccezioni di qualsiasi tipo. Per altre informazioni, vedere Gestione delle eccezioni nelle informazioni di riferimento sul linguaggio C++.
Vedere l'esempio per l'istruzionetry-except per vedere il funzionamento dell'istruzionetry-finally.
END Specifico di Microsoft