Partilhar via


Exception-Handler Sintaxe

As palavras-chave __try e __except são usadas para construir um manipulador de exceções 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 do manipulador de exceções exigem chaves ({}). Não é permitido usar uma instrução goto para saltar para o corpo de um bloco de __try ou para um bloco manipulador de exceções. Esta regra aplica-se a manipuladores de exceção e manipuladores de terminação.

O bloco __try contém o corpo de código protegido que o manipulador de exceções 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 dentro do bloco __try, o sistema assume o controle e inicia a busca por um manipulador de exceções. Para obter uma descrição detalhada dessa pesquisa, consulte Exception Handling.

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 oCreateProcessou função de CreateThread, as exceções que ocorrerem dentro do 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 ao ponto em que a exceção ocorreu. Se a exceção não for continuá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, 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 do 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 quadros.