Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
__trycompound-statement__finallycompound-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:
De beveiligde sectie wordt uitgevoerd.
De beëindigingshandler wordt aangeroepen.
Wanneer de beëindigingshandler is voltooid, wordt de uitvoering voortgezet na de
__finallyinstructie. Ongeacht hoe de beveiligde sectie eindigt (bijvoorbeeld via eengotoinstructie uit het bewaakte lichaam of via eenreturninstructie), 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