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
:
__try
compound-statement
__finally
compound-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
__finally
instrução. Não importa como a seção protegida termina (por exemplo, por meio de umagoto
instrução fora do corpo protegido ou por meio de umareturn
instruçã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