#include #include jmp_buf go; int foo() { return 5; } int bar() { longjmp(go,1); return 6; } int main(int argc, char* argv[]) { bool jumped = false; int (*ptr) (); // if arg then long jump if (argc != 2) { ptr = foo; } else { ptr = bar; } for (int i = 0; i < 50000000; ++i) { ++i; --i; } setjmp(go); if (!jumped) { jumped = true; ptr(); } else { std::cout << "AFTER long jump." << std::endl; } return 0; }