English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ferramentas online

O)

Funções do C

Array do C

Ponteiro do C

String do C

Controle de fluxo de linguagem C

Estrutura de linguagem C

Arquivo de linguagem C

Outros C

Manual de referência do C

Biblioteca Padrão do C - <setjmp.h>

Uso e exemplo da macro setjmp() da biblioteca C Macro da biblioteca C int setjmp(jmp_buf ambiente)

:Cria e inicializa um buffer local jmp_buf para saltos futuros. Esta subrotina salva o ambiente de chamada do programa no buffer apontado por env, que será usado por longjmp. Se retornar diretamente de setjmp, setjmp retornará 0. Se retornar do ambiente de chamada restaurado por longjmp, setjmp retornará um valor não nulo.

Declaração

int setjmp(jmp_buf ambiente)

Parâmetros

  • Ambiente -- Este é um objeto do tipo jmp_buf usado para armazenar informações de ambiente.

Retorno

Esta macro pode retornar mais de uma vez. A primeira vez, quando chamada diretamente, sempre retorna zero. Quando longjmp é chamado com informações de ambiente configuradas, esta macro retorna novamente, e o valor retornado será passado para longjmp como o segundo parâmetro.

Exemplo online

O exemplo a seguir demonstra o uso da macro setjmp().

#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void second(void) {
    printf("second\n");         // Imprimir
    longjmp(buf,1);             // Volta para o local de chamada setjmp - Faz com que setjmp retorne o valor1
}
 
void first(void) {
    second();
    printf("first\n");          // Impossível executar até esta linha
}
 
int main() {   
    if (! setjmp(buf)) {
        first();                // Antes de entrar nesta linha, setjmp retorna 0
    } else {                    // Quando longjmp salta de volta, setjmp retorna1Portanto, entra nesta linha
        printf("main\n");       // Imprimir
    }
 
    return 0;
}

Vamos compilar e executar o programa acima, o que produzirá o seguinte resultado:

second
main

Biblioteca Padrão do C - <setjmp.h>