Usar setjmp/longjmp
Cuando se utilizan conjuntamente setjmp y longjmp, proporcionan una manera de ejecutar una instrucción goto no local. Se utilizan 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 estándar de llamada o devolución.
Advertencia
Sin embargo, como setjmp y longjmp no admiten la semántica de objeto de C++, y como además pueden degradar el rendimiento evitando la optimización en variables locales, se recomienda que no se utilicen en los programas de C++.Se recomienda utilizar construcciones try/catch en su lugar.
Si decide utilizar setjmp/longjmp en un programa de C ++, incluya también SETJMP.H o SETJMPEX.H para garantizar la interacción correcta entre las funciones y el control de excepciones de C++. Si utiliza /EH para compilar, se llama a los destructores para objetos locales durante el desenredo de la pila. Si utiliza /EHs para compilar, y una de sus funciones llama a una función que utiliza nothrow y la función que usa nothrow llama a longjmp, puede que no se produzca el desenredo del destructor, dependiendo del optimizador.
En código portable, cuando se ejecuta una instrucción goto no local que llama a longjmp, la destrucción correcta de objetos basados en marcos podría no ser confiable.