instruction de try-finally (c)
Spécifique à Microsoft
L'instruction d' try-finally est une extension Microsoft du langage C qui permet aux applications de garantir l'exécution de code de nettoyage lorsque l'exécution d'un bloc de code est interrompue.Le nettoyage se compose des tâches telles que la libération de la mémoire, une fermeture de fichiers, et libérer des handles de fichiers.L'instruction d' try-finally est particulièrement utile pour les routines qui ont plusieurs endroits où un contrôle est effectuée pour une erreur qui peut provoquer un retour prématuré de la routine.
essai-enfin-instruction:
instruction composée de __tryinstruction composée de**__finally**
l'instruction composée après la clause d' __try est la section protégée.l'instruction composée après la clause d' __finally est le gestionnaire de terminaisons.Le gestionnaire spécifie un jeu d'actions qui s'exécutent lorsque la section protégée est quittée, si la section protégée est quittée par une exception (anormal) ou par la série standard (arrêt normal).
Le contrôle atteint une instruction d' __try par exécution séquentielle simple (exécuter).Lorsque le contrôle écrit l'instruction d' __try , son gestionnaire associé devient actif.L'exécution se poursuit comme suit :
la section protégée est exécutée.
le gestionnaire de terminaisons est appelé.
Lorsque le gestionnaire de terminaisons terminée, l'exécution reprend après l'instruction d' __finally .Indépendamment de la façon dont la section protégée terminé (par exemple, via une instruction d' goto extérieur de le corps protégé ou via une instruction d' return ), le gestionnaire de terminaisons est exécuté avant que le flux de contrôle sort de la section protégée.
le mot clé d' __leave est valide dans un bloc d'instructions d' try-finally .L'effet d' __leave est d'accéder à la fin de le bloc d' try-finally .le gestionnaire de terminaisons est immédiatement exécuté.Bien qu'une instruction d' goto puisse être utilisée pour obtenir le même résultat, une instruction d' goto provoque le déroulement de pile.L'instruction d' __leave est plus efficace car elle n'implique pas le déroulement de pile.
Quittant une instruction d' try-finally à l'aide d'une instruction d' return ou la fonction runtime d' longjmp est considéré comme un arrêt anormal.Il n'est pas conforme d'accéder dans une instruction d' __try , mais permis de saut en dehors d'une.Toutes les instructions d' __finally actives entre le point de départ et la destination doivent être exécutées.Cela est appelé « déroulement local ».
Le gestionnaire de terminaisons n'est pas appelé si un processus est tué lors de l'exécution d'une instruction d' try-finally .
[!REMARQUE]
La gestion structurée des exceptions fonctionne avec les fichiers sources C et C++.Toutefois, il n'est pas spécifiquement conçue pour C++.Vous pouvez garantir que votre code est plus portable à l'aide de la gestion des exceptions C++.En outre, le mécanisme de gestion des exceptions C++ est beaucoup plus flexible, parce qu'il peut gérer les exceptions de tout type.
[!REMARQUE]
Pour les programmes C++, la gestion des exceptions C++ doit être utilisée à la place de la gestion structurée des exceptions.Pour plus d'informations, consultez gestion des exceptions dans le Guide de référence du langage C++.
Consultez l'exemple pour instruction try-except l'instruction pour voir comment l'instruction d' try-finally s'exécute.
détail de FIN Microsoft