Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Spécifique à Microsoft
L’instruction try-finally est une extension Microsoft au langage C qui permet aux applications de garantir l’exécution du code de nettoyage lorsque l’exécution d’un bloc de code est interrompue. Le nettoyage se compose de tâches telles que l’allocation de mémoire, la fermeture de fichiers et la libération de handles de fichiers. L’instruction try-finally est particulièrement utile pour les routines qui ont plusieurs endroits où une vérification est effectuée pour une erreur susceptible de provoquer un retour prématuré de la routine.
try-finally-statement:
__trycompound-statement__finallycompound-statement
L’instruction composée après la __try clause est la section protégée. L’instruction composée après la __finally clause est le gestionnaire d’arrêt. Le gestionnaire spécifie un ensemble d’actions qui s’exécutent lorsque la section protégée est terminée. Il n’est pas important que la section protégée soit quittée par une exception (arrêt anormal) ou par une norme qui passe par (arrêt normal).
Le contrôle atteint une __try instruction par une exécution séquentielle simple (passez à travers). Lorsque le contrôle entre dans l’instruction __try , son gestionnaire associé devient actif. L’exécution se poursuit comme suit :
La section protégée est exécutée.
Le gestionnaire d’arrêt est appelé.
Une fois le gestionnaire d’arrêt terminé, l’exécution se poursuit après l’instruction
__finally. Quelle que soit la façon dont la section protégée se termine (par exemple, par le biais d’unegotoinstruction hors du corps protégé ou via unereturninstruction), le gestionnaire d’arrêt est exécuté avant le déplacement du contrôle hors de la section protégée.
Le __leave mot clé est valide dans un bloc d’instructions try-finally . L’effet est __leave de passer à la fin du try-finally bloc. Le gestionnaire d’arrêt est immédiatement exécuté. Bien qu’une goto instruction puisse être utilisée pour accomplir le même résultat, une goto instruction provoque le déroulement de la pile. L’instruction __leave est plus efficace, car elle n’implique pas le déroulement de la pile.
La sortie d’une try-finally instruction à l’aide d’une return instruction ou de la longjmp fonction d’exécution est considérée comme un arrêt anormal. Il n’est pas légal de sauter dans une __try déclaration, mais légal de sortir d’un. Toutes les __finally instructions actives entre le point de départ et la destination doivent être exécutées. C’est ce qu’on appelle un déroulement local.
Le gestionnaire d’arrêt n’est pas appelé si un processus est tué lors de l’exécution d’une try-finally instruction.
Remarque
La gestion structurée des exceptions fonctionne avec les fichiers sources C et C++. Toutefois, il n’est pas spécifiquement conçu pour C++. Pour les programmes C++ portables, la gestion des exceptions C++ doit être utilisée au lieu de la gestion structurée des exceptions. En outre, le mécanisme de gestion des exceptions C++ est beaucoup plus flexible, car il peut gérer les exceptions de n’importe quel type. Pour plus d’informations, consultez Gestion des exceptions dans la référence du langage C++.
Consultez l’exemple de l’instructiontry-except pour voir comment l’instruction try-finally fonctionne.
END Spécifique à Microsoft