try-finally instrução (C)
Específicos do Microsoft
O try-finally a declaração é uma extensão Microsoft para a linguagem c que permite que aplicativos garantir a execução de código de limpeza quando a execução de um bloco de código for interrompida.Limpeza consiste em tarefas como a desalocação de memória, fechando arquivos e liberando os identificadores de arquivo.O try-finally instrução é especialmente útil para retornam de rotinas que têm vários lugares onde uma verificação é feita para um erro que poderia causar prematura da rotina.
try-finally-instrução:
__try declaração de compostos__finally declaração de compostos
A instrução composta após o __try cláusula é a seção protegida.A instrução composta após o __finally cláusula é o manipulador de terminação.O manipulador Especifica um conjunto de ações executadas quando a seção protegida é finalizada, se a seção protegida é encerrada por uma exceção (anormal) ou por falha padrão (término normal).
Controlar atinge um __try declaração de execução seqüencial simple (por meio de retorno).Quando insere um controle a __try declaração, seu manipulador associado ficará ativa.Execução ocorre da seguinte maneira:
A seção protegida é executada.
O manipulador de terminação é invocado.
Quando o manipulador de terminação é concluída, a execução continua após a __finally instrução.Independentemente da forma como o protegidos extremidades de seção (por exemplo, via um goto instrução fora do corpo protegido ou por meio de um return instrução), o manipulador de terminação é executado antes do fluxo de controle se move da seção protegida.
O __leave palavra-chave é válido dentro de um try-finally bloco de declaração.O efeito de __leave é ir até o final da try-finally bloco.O manipulador de terminação é executado imediatamente.Embora um goto declaração pode ser usada para obter o mesmo resultado, um goto instrução faz com que o desenrolamento de pilha.O __leave instrução é mais eficiente, porque ela não envolve o desenrolamento de pilha.
Sair de um try-finally usando a instrução um return instrução ou o longjmp a função de tempo de execução é considerada anormal.É ilegal para saltar para uma __try instrução, mas legal para saltar para fora de um.Todos os __finally instruções que estão ativas entre o ponto de partida e o destino devem ser executadas.Isso é chamado de "unwind local".
O manipulador de terminação não denomina-se um processo é eliminado durante a execução de um try-finally instrução.
Observação |
---|
Manipulação de exceção estruturada trabalha com arquivos de código-fonte c e C++.No entanto, ele não é especificamente projetado para C++.Você pode garantir que seu código seja mais portátil usando o tratamento de exceções do C++.Além disso, a mecanismo de tratamento de exceção do C++ é muito mais flexível, que pode lidar com exceções de qualquer tipo. |
Observação |
---|
Para programas em C++, manipulação de exceção de C++ deve ser usada em vez de manipulação de exceção estruturada.Para obter mais informações, consulte Exception Handling na Referência da linguagem C++. |
Consulte o exemplo para o tente-exceto a instrução para ver como o try-finally works de instrução.
Específicos do Microsoft final