Partager via


try-finally, instruction (C)

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 :
__try compound-statement __finally compound-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 :

  1. La section protégée est exécutée.

  2. Le gestionnaire d’arrêt est appelé.

  3. 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’une goto instruction hors du corps protégé ou via une return instruction), 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

Voir aussi

try-finally instruction (C++)