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
.