Compartilhar via


Sintaxe Exception-Handler

As palavras-chave __try e __except são usadas para construir um manipulador de exceção baseado em quadros. O exemplo a seguir mostra a estrutura de um manipulador de exceção.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Observe que o bloco __try e o bloco de manipulador de exceção exigem chaves ({}). Não é permitido usar uma instrução goto para entrar no corpo de um bloco de __try ou em um bloco de manipulador de exceção. Essa regra se aplica a manipuladores de exceção e manipuladores de terminação.

O bloco __try contém o corpo protegido do código que o manipulador de exceção protege. Uma função pode ter qualquer número de manipuladores de exceção e essas instruções de tratamento de exceção podem ser aninhadas dentro da mesma função ou em funções diferentes. Se ocorrer uma exceção no bloco __try, o sistema assumirá o controle e iniciará a pesquisa por um manipulador de exceção. Para obter uma descrição detalhada desta pesquisa, consulte de Tratamento de Exceções.

O manipulador de exceção recebe apenas exceções que ocorrem em um único thread. Isso significa que, se um bloco __try contiver uma chamada para a função CreateProcess ou CreateThread, exceções que ocorrem dentro do novo processo ou thread não serão expedidas para esse manipulador.

O sistema avalia a expressão de filtro de cada manipulador de exceção que protege o código no qual a exceção ocorreu até que a exceção seja tratada ou não haja mais manipuladores. Uma expressão de filtro deve ser avaliada como um dos três valores a seguir.

Valor Significado
EXCEPTION_EXECUTE_HANDLER O sistema transfere o controle para o manipulador de exceção e a execução continua no quadro de pilha no qual o manipulador é encontrado.
EXCEPTION_CONTINUE_SEARCH O sistema continua a procurar um manipulador.
EXCEPTION_CONTINUE_EXECUTION O sistema interrompe sua pesquisa por um manipulador e retorna o controle ao ponto em que a exceção ocorreu. Se a exceção for incontinuável, isso resultará em uma exceção EXCEPTION_NONCONTINUABLE_EXCEPTION.

 

A expressão de filtro é avaliada no contexto da função na qual o manipulador de exceção está localizado, embora a exceção possa ter ocorrido em uma função diferente. Isso significa que a expressão de filtro pode acessar as variáveis locais da função. Da mesma forma, o bloco de manipulador de exceção pode acessar as variáveis locais da função na qual ele está localizado.

Para obter mais exemplos, consulte Usando um manipulador de exceção.

Para obter mais informações sobre expressões de filtro e funções de filtro, consulte de tratamento de exceção baseado em quadro.