Función setjmp ANSI C

int setjmp(jmp_buf entorno);

Guarda su entorno de llamadas en el argumento entorno para uso posterior por la función longjmp.

Valor de Retorno:

Si el retorno es de una invocación directa, la función setjmp retorna el valor, cero. Si el retorno es desde una llamada de la función longjmp, la función setjmp retorna un valor distinto a cero.

Una invocación de la función setjmp aparecerá slamente en uno de los siguientes contextos:

  • La expresión controladora completa de una sentencia de selección o iteración.
  • Un operando de un operador de relación o igualdad con el otro operando una expresión constante y entera, con la expresión resultante siendo la expresión controladora completa de una sentencia de selección o iteración.
  • El operando de un operador unario ! con la expresión resultante siendo la expresión controladora completa de una sentencia de selección o iteración.
  • La expresión completa de una sentencia de una expresión.

Ejemplo:

#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>

void salto( jmp_buf saltimbanqui, int v )
{
   longjmp( saltimbanqui, v );
}

int main()
{   
   int valor;
   jmp_buf entorno;

   printf( "longjmp y setjmp son una forma de simular el \'goto\'\n\n" );

   valor = setjmp( entorno );   /* Volveremos aquí */
   if( valor != 0 ) 
   {
      printf( "Longjmp con el valor: %d\n", valor );
      exit( valor );
   }

   printf( "Vamos a saltar ... \n" );
   salto( entorno, 1 );         /* Salta al momento de setjmp() */

   return 0;
}