Usando setjmp/longjmp
Quando setjmp e longjmp são usados juntos, eles fornecem uma maneira de executar um goto não local. Normalmente, eles são usados para transmitir o controle de execução para o código de recuperação ou de tratamento de erros em uma rotina anteriormente chamada anteriormente sem usar as convenções padrão de chamada ou de retorno.
Aviso
No entanto, como setjmp e longjmp não suportam semânticas de objeto de C++ e como podem prejudicar o desempenho evitando a otimização em variáveis locais, recomendamos que você não os utilize nos programas do C++.Recomendamos que você use construções try/catch em vez disso.
Se você decidir usar setjmp/longjmp em um programa de C++, inclua também SETJMP.H ou SETJMPEX.H para garantir a interação correta entre as funções e a manipulação de exceção do C++. Se você usar /EH para compilar, os destruidores de objetos locais serão chamados durante o desenrolamento da pilha. Se você usar /EHs para compilar e uma das funções chamar uma função que usa nothrow e a função que usa nothrow chamar longjmp, o desenrolamento do destruidor poderá não ocorrer, dependendo do otimizador.
No código portátil, quando um goto não local que chama longjmp é executado, a destruição correta dos objetos baseados em quadro pode não ser confiável.