BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 9 Librerías Estándar
Teoría: Saltos no locales <setjm.h>

jmp_buf
Un tipo de arreglo adecuado para contener la información necesaria para restaurar un entorno llamador.

int setjmp(jmp_buf env);
Guarda su entorno llamador en el argumento jmp_bufpara uso posterior en la función longjmp.
Si el regreso es debido a una invocación directa, la macro setjmp devuelve el valor cero. Si el regreso es debido a una llamada de la función longjmp , la macro setjmp devuelve un valor no cero.Una invocación a la macro setjmp debe de aparecer sólo en alguno de los siguientes contextos:
* en la totalidad de la expresión de control de un enunciado de selección o de iteración.

* Un operando de un operador relacional o de igualdad siendo el otro operando una expresión constante entera, con la expresión resultante siendo la expresión de control total de un enunciado de selección o de iteración;

* el operando del operador unario ! con la expresión resultante siendo la expresión de control total de un enunciado de selección o de iteración; o bien

* la expresión total de un enunciado de expresión.

void longjmp(jmp_buf env, int val);
Devuelve el entorno guardado por la invocación más reciente de la macro setjmp en la misma invocación del programa, con el argumento correspondiente jmp_buf. Si dicha invocación no ha ocurrido o si en el ínterin la función que contiene la invocación de la macro setjmp ha terminado su ejecución, el comportamiento queda indefinido.
Todos los objetos accesibles tienen valores correspondientes al momento en que fue llamado longjmp, excepto que los valores de objeto de persistencia automática, que son locales a la función que contiene la invocación de la macro setjmp corresponmdiente que no son del tipo volátil y que han sido modificados entre la invocación setjmp y la invocación longjmp, quedan indeterminados.
Como pasa por alto los mecanismos usuales de llamada de función y de regreso, longjmp ejecutará de forma correcta en el contexto de interrupciones, señales y cualquiera de sus funciones asociadas. Sin embargo , si la funcuión longjmp es invocada a partir de un manejador de señales anidado ( esto es, desde una función invocada como resultado de una señal iniciada durante el manejo de otra señal), el comportamiento queda indefinido.
Despues de que longjmp se haya completado, la ejecución del programa continuará como si la invocación correspondiente de la macro setjmp hubiera devuelto el valor especificado por val. La función longjmp no puede hacer que la macro setjmp devuelva el valor 0; si val es 0, la macro setjmp devuelve el valor 1.