Compartilhar via


setjmp

Salva o estado atual do programa.

Sintaxe

int setjmp(
   jmp_buf env
);

Parâmetros

env
Variável em que o ambiente é armazenado.

Valor retornado

Retorna 0 depois de salvar o ambiente de pilha. Se setjmp retornar devido a uma longjmp chamada, ele retornará o value argumento de longjmp, ou se o value argumento de longjmp for 0, setjmp retornará 1. Não há retorno de erro.

Comentários

A função setjmp salva um ambiente de pilha, que você poderá restaurar posteriormente usando longjmp. Quando usados juntos, setjmp e longjmp fornecem uma maneira de executar um goto não local. Normalmente, eles são usados para transmitir o controle de execução para o código de recuperação ou de tratamento de erros em uma rotina anteriormente chamada anteriormente sem usar as convenções normais de chamada ou de retorno.

Uma chamada para setjmp salva o ambiente de pilha atual em env. Uma chamada subsequente para longjmp restaura o ambiente salvo e retorna o controle para o ponto imediatamente após a chamada setjmp correspondente. Todas as variáveis (exceto a variáveis de registro) acessíveis para a rotina de recebimento do controle contêm os valores que tinham quando longjmp foi chamado.

Não é possível usar setjmp para saltar de código nativo para gerenciado.

Seção específica da Microsoft

No código do Microsoft C++ no Windows, longjmp usa a mesma semântica de desenrolamento de pilha que o código de tratamento de exceções. Ele pode ser usado com segurança nos mesmos locais em que exceções do C++ podem ser geradas. No entanto, esse uso não é portátil e tem algumas ressalvas importantes. Para saber detalhes, veja longjmp.

Fim da seção específica da Microsoft

Observação

No código C++ portátil, você não pode presumir que setjmp e longjmp dão suporte à semântica de objeto C++. Especificamente, um par de chamadas setjmp/longjmp terá um comportamento indefinido ao substituir setjmp e longjmp por catch, e throw invocará os destruidores não triviais para os objetos automáticos, se houver. Em programas C++, é recomendável usar o mecanismo de manipulação de exceções do C++.

Para obter mais informações, confira Usando setjmp e longjmp.

Requisitos

Rotina Cabeçalho necessário
setjmp <setjmp.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

Confira o exemplo de _fpreset.

Confira também

Controle de processo e ambiente
longjmp