Delen via


try-finally statement (C)

microsoft-specifieke

De try-finally instructie is een Microsoft-extensie voor de C-taal waarmee toepassingen de uitvoering van opschoningscode kunnen garanderen wanneer het uitvoeren van een codeblok wordt onderbroken. Opschonen bestaat uit taken zoals het verplaatsen van geheugen, het sluiten van bestanden en het vrijgeven van bestandsingangen. De try-finally instructie is vooral handig voor routines met verschillende plaatsen waar een controle wordt uitgevoerd op een fout die voortijdige terugkeer van de routine kan veroorzaken.

try-finally-statement:
__try compound-statement __finally compound-statement

De samengestelde instructie na de __try component is de beveiligde sectie. De samengestelde instructie na de __finally component is de beëindigingshandler. De handler geeft een set acties op die worden uitgevoerd wanneer de beveiligde sectie wordt afgesloten. Het maakt niet uit of de beveiligde sectie wordt afgesloten door een uitzondering (abnormale beëindiging) of door standaard te vallen (normale beëindiging).

Het besturingselement bereikt een __try instructie door eenvoudige sequentiële uitvoering (vallen door). Wanneer het besturingselement de instructie invoert, wordt de __try bijbehorende handler actief. De uitvoering gaat als volgt:

  1. De beveiligde sectie wordt uitgevoerd.

  2. De beëindigingshandler wordt aangeroepen.

  3. Wanneer de beëindigingshandler is voltooid, wordt de uitvoering voortgezet na de __finally instructie. Ongeacht hoe de beveiligde sectie eindigt (bijvoorbeeld via een goto instructie uit het bewaakte lichaam of via een return instructie), wordt de beëindigingshandler uitgevoerd voordat de controlestroom uit de beveiligde sectie gaat.

Het __leave trefwoord is geldig binnen een try-finally instructieblok. Het effect is __leave om naar het einde van het try-finally blok te springen. De beëindigingshandler wordt onmiddellijk uitgevoerd. Hoewel een goto instructie kan worden gebruikt om hetzelfde resultaat te bereiken, zorgt een goto instructie ervoor dat stack afwikkelt. De __leave instructie is efficiënter omdat het niet nodig is om stapels te ontspannen.

Het afsluiten van een try-finally instructie met behulp van een return instructie of de longjmp runtimefunctie wordt beschouwd als abnormale beëindiging. Het is niet legaal om naar een __try verklaring te springen, maar om er een uit te springen. Alle __finally instructies die actief zijn tussen het vertrekpunt en de bestemming moeten worden uitgevoerd. Het heet een lokale rust.

De beëindigingshandler wordt niet aangeroepen als een proces wordt gedood tijdens het uitvoeren van een try-finally instructie.

Opmerking

De verwerking van gestructureerde uitzonderingen werkt met C- en C++-bronbestanden. Het is echter niet specifiek ontworpen voor C++. Voor draagbare C++-programma's moet de verwerking van C++-uitzonderingen worden gebruikt in plaats van gestructureerde uitzonderingsafhandeling. Bovendien is het C++-mechanisme voor het afhandelen van uitzonderingen veel flexibeler, omdat het uitzonderingen van elk type kan verwerken. Zie De verwerking van uitzonderingen in de C++-taalreferentie voor meer informatie.

Zie het voorbeeld voor de try-except instructie om te zien hoe de try-finally instructie werkt.

Microsoft-specifiek beëindigen

Zie ook

try-finally instructie (C++)