setjmp

Guarda el estado actual del programa.

Sintaxis

int setjmp(
   jmp_buf env
);

Parámetros

env
Variable donde se almacena el entorno.

Valor devuelto

Devuelve 0 después de guardar el entorno de pila. Si setjmp devuelve debido a una longjmp llamada, devuelve el value argumento de longjmp, o si el value argumento de longjmp es 0, setjmp devuelve 1. No se devuelve ningún error.

Comentarios

La función setjmp guarda un entorno de pila, que se puede restaurar posteriormente usando longjmp. Cuando se usan conjuntamente, setjmp y longjmp proporcionan una forma de ejecutar un goto no local. Se usan normalmente para pasar el control de la ejecución al control de errores o al código de recuperación en una rutina invocada anteriormente sin utilizar convenciones habituales de llamada o devolución.

Una llamada a setjmp guarda el entorno de pila actual en env. Una llamada subsiguiente a longjmp restaura el entorno guardado y devuelve el control al punto inmediatamente posterior a la llamada setjmp correspondiente. Todas las variables (excepto las variables de registro) a las que se puede obtener acceso en la rutina que recibe el control contienen los valores que tenían cuando se llamó a longjmp.

No se puede usar setjmp para pasar de código nativo a código administrado.

Específicos de Microsoft

En el código de Microsoft C++ en Windows, longjmp usa la misma semántica de desenredo de pila que el código de control de excepciones. Se puede usar de forma segura en los mismos lugares en los que se pueden generar excepciones de C++. Sin embargo, este uso no es portable y viene con algunas advertencias importantes. Para obtener información detallada, vea longjmp.

FIN de Específicos de Microsoft

Nota:

En el código portable de C++, no se puede asumir que setjmp y longjmp admiten la semántica de objetos de C++. En concreto, un par de llamadas setjmp/longjmp tiene un comportamiento indefinido si, al reemplazar setjmp y longjmp por catch y throw, se invocan destructores no triviales para todos los objetos automáticos. En los programas de C++, se recomienda usar el mecanismo de control de excepciones de C++.

Para más información, consulte Uso de setjmp y longjmp.

Requisitos

Routine Encabezado necesario
setjmp <setjmp.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

Vea el ejemplo de _fpreset.

Consulte también

Control de procesos y entornos
longjmp