int setjmp (jmp_buf ponto)
Recebe: uma variável que irá indicar o ponto a partir do qual o código é executado quando a função longjmp().
Retorna: em sua primeira chamada com uma mesma variável, a função retorna zero, e após a primeira vez um valor diferente de zero.
Exemplo de uso da função:
//EXEMPLO setjmp()
#include <stdio.h>
#include <setjmp.h>
int main() {
jmp_buf pulo;
int controle = setjmp(pulo);
printf("Ao infinito e além! %d\n", controle);
if (controle == 0)
longjmp(pulo, 42);
return 0;
}
Saída do
terminal:
>clang-7 -pthread -lm -o main main.c
>./main
Ao infinito e além! 0
Ao infinito e além! 42
void longjmp(jmp_buf ponto, int valor)
Recebe: uma variável do tipo jmp_buf, que indica para onde a função deverá saltar, e um valor numérico diferente de zero, o qual será utilizado pela função setjmp() para retornar o valor inteiro não igual a zero após a execução do primeiro salto.
Retorna: void, função sem retorno.
Exemplo de uso da função:
//EXEMPLO longjmp()
#include <stdio.h>
#include <setjmp.h>
int main() {
jmp_buf pulo;
int controle = setjmp(pulo);
if (controle == 1) {
printf("Eu pulo... ");
controle = setjmp(pulo);
}
if (controle == 2) {
printf("e pulo... ");
controle = setjmp(pulo);
}
if (controle == 3) {
printf("e pulo sem parar!!\n");
controle = setjmp(pulo);
}
if (controle != 4)
longjmp(pulo, controle + 1);
return 0;
}
Saída do
terminal:
>clang-7 -pthread -lm -o main main.c
>./main
Eu pulo... e pulo... e pulo sem parar!!