Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Específico da Microsoft
A try-finally instrução é uma extensão da Microsoft para a linguagem C que permite que os aplicativos garantam a execução do código de limpeza quando a execução de um bloco de código é interrompida. A limpeza consiste em tarefas como deslocalizar memória, fechar arquivos e liberar identificadores de arquivos. A try-finally declaração é especialmente útil para rotinas que têm vários lugares onde é feita uma verificação de um erro que pode causar retorno prematuro da rotina.
try-finally-statement:
__trycompound-statement__finallycompound-statement
A declaração composta após a __try cláusula é a seção protegida. A instrução composta após a __finally cláusula é o manipulador de terminação. O manipulador especifica um conjunto de ações que são executadas quando a seção protegida é encerrada. Não importa se a seção protegida é abandonada por uma exceção (rescisão anormal) ou por queda padrão (término normal).
O controle alcança uma __try instrução por execução sequencial simples (fall through). Quando o controle insere a __try instrução, seu manipulador associado torna-se ativo. A execução processa-se da seguinte forma:
A seção vigiada é executada.
O manipulador de terminação é invocado.
Quando o manipulador de rescisão for concluído, a execução continuará após a
__finallyinstrução. Não importa como a seção protegida termina (por exemplo, através de umagotodeclaração fora do corpo protegido ou através de umareturndeclaração), o manipulador de terminação é executado antes que o fluxo de controle se mova para fora da seção protegida.
A __leave palavra-chave é válida dentro de um bloco de try-finally instrução. O efeito de __leave é saltar para o final do try-finally bloco. O manipulador de terminação é executado imediatamente. Embora uma goto instrução possa ser usada para obter o mesmo resultado, uma goto instrução causa o desenrolamento da pilha. A __leave instrução é mais eficiente porque não envolve desenrolamento de pilha.
Sair de uma try-finally instrução usando uma return instrução ou a longjmp função de tempo de execução é considerado terminação anormal. Não é legal saltar para uma __try declaração, mas legal saltar de uma. Todas as __finally instruções que estão ativas entre o ponto de partida e o destino devem ser executadas. É o chamado desanuviamento local.
O manipulador de rescisão não é chamado se um processo for morto durante a execução de uma try-finally instrução.
Observação
O tratamento estruturado de exceções funciona com arquivos de origem C e C++. No entanto, ele não foi projetado especificamente para C++. Para programas C++ portáteis, o tratamento de exceções C++ deve ser usado em vez do tratamento estruturado de exceções. Além disso, o mecanismo de tratamento de exceções C++ é muito mais flexível, na medida em que pode lidar com exceções de qualquer tipo. Para obter mais informações, consulte Tratamento de exceções na Referência de linguagem C++.
Veja o exemplo da try-except instrução para ver como ela try-finally funciona.
END específico da Microsoft