Compartilhar via


Sintaxe do manipulador de exceções

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

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

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

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

O manipulador de exceções 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, as exceções que ocorrerem no novo processo ou thread não serão despachadas 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 manipulada 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ções 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 busca por um manipulador e retorna o controle para o ponto em que a exceção ocorreu. Se a exceção não for contínua, 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, mesmo que 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 manipulador de exceções pode acessar as variáveis locais da função na qual está localizado.

Para obter mais exemplos, consulte Usando um manipulador de exceções.

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