Here’s a simple example that demonstrates the usage of setjmp and longjmp in C:
#include <stdio.h>
#include <setjmp.h>
static jmp_buf env;
void foo(void);
int main()
{
if (setjmp(env) == 0)
{
printf("Calling foo...\n");
foo();
printf("Returned from foo.\n");
}
else
{
printf("Jumped back to main!\n");
}
return 0;
}
void foo(void)
{
printf("Inside foo. Jumping back to main...\n");
longjmp(env, 1);
}
In this program, we use setjmp to save the current state at the beginning of main, and then call a function foo. Inside foo, we print a message and then call longjmp to jump back to the saved state in main.
When we run this program, it produces the following output:
Calling foo...
Inside foo. Jumping back to main...
Jumped back to main!
As you can see, when we call longjmp from inside foo, it causes the program execution to “jump” back to where we called setjmp in main. This allows us to implement non-local control flow within our program.




