Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 desalocar memória, fechar arquivos e liberar identificadores de arquivo. A try-finally instrução é especialmente útil para rotinas que têm vários locais onde uma verificação é feita para um erro que pode causar retorno prematuro da rotina.
try-finally-statement:
__trycompound-statement__finallycompound-statement
A instruçã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 é encerrada por uma exceção (terminação anormal) ou por fall through padrão (término normal).
O controle atinge uma __try instrução por execução sequencial simples (fall through). Quando o controle insere a __try instrução, seu manipulador associado fica ativo. A execução prossegue da seguinte maneira:
A seção protegida é executada.
O manipulador de terminação é invocado.
Quando o manipulador de terminação for concluído, a execução continuará após a
__finallyinstrução. Não importa como a seção protegida termina (por exemplo, por meio de umagotoinstrução fora do corpo protegido ou por meio de umareturninstrução), o manipulador de terminação é executado antes que o fluxo de controle saia da seção protegida.
A __leave palavra-chave é válida em um try-finally bloco de instrução. O efeito é __leave ir para o final do try-finally bloco. O manipulador de terminação é executado imediatamente. Embora uma goto instrução possa ser usada para realizar o mesmo resultado, uma goto instrução causa desenrolamento de 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 encerramento anormal. Não é legal entrar em uma __try declaração, mas legal pular de uma. Todas as __finally instruções que estão ativas entre o ponto de partida e o destino devem ser executadas. Chama-se desenrolamento local.
O manipulador de terminação não será chamado se um processo for encerrado durante a execução de uma try-finally instrução.
Observação
O tratamento de exceções estruturados 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 do C++ deve ser usado em vez de tratamento de exceção estruturado. Além disso, o mecanismo de tratamento de exceções do C++ é muito mais flexível, pois pode lidar com exceções de qualquer tipo. Para obter mais informações, consulte Tratamento de exceção na Referência de Linguagem C++.
Veja o exemplo da try-except instrução para ver como a try-finally instrução funciona.
END específico da Microsoft