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
.