Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.