Interview answers verified by specialists.

Find interview questions and answers on this website:

See right interview answers on 30 common job interview questions

Is there a way to jump out of a function or functions?

The standard library functions setjmp() and longjmp() are used to provide a goto that can jump out of a
function or functions, in the rare cases in which this action is useful. To correctly use  setjmp() and
longjmp(), you must apply several conditions.

You must #include the header file setjmp.h. This file provides the prototypes for setjmp() and longjmp(),
and it defines the type jmp_buf. You need a variable of type jmp_buf to pass as an argument to both setjmp() and longjmp(). This variable will contain the information needed to make the jump occur.

You must call setjmp() to initialize the jmp_buf variable. If setjmp() returns 0, you have just initialized the
jmp_buf. If setjmp() returns anything else, your program just jumped to that point via a call to longjmp().
In that case, the return value is whatever your program passed to longjmp().

Conceptually, longjmp() works as if when it is called, the currently executing function returns. Then the
function that called it returns, and so on, until the function containing the call to setjmp() is executing.
Then execution jumps to where setjmp() was called from, and execution continues from the return of
setjmp(), but with the return value of setjmp() set to whatever argument was passed to longjmp().
In other words, if function f() calls setjmp() and later calls function g(), and function g() calls function
h(), which calls  longjmp(), the program behaves as if  h() returned immediately, then  g() returned
immediately, then f() executed a goto back to the setjmp() call.

What this means is that for a call to longjmp() to work properly, the program must already have called
setjmp() and must not have returned from the function that called setjmp(). If these conditions are not
fulfilled, the operation of longjmp() is undefined (meaning your program will probably crash). The program
The below program illustrates the use of setjmp() and longjmp(). It is obviously contrived, because it would be
simpler to write this program without using setjmp() and longjmp(). In general, when you are tempted to
use setjmp() and longjmp(), try to find a way to write the program without them, because they are easy to
misuse and can make a program difficult to read and maintain.

/* An example of using setjmp() and longjmp(). */
#include        <setjmp.h>
#include        <stdio.h>
#include        <string.h>
#include        <stdlib.h>
#define QUIT_PROCESS  2
jmp_buf env;
int nitems;
int procItem()
    char    buf[256];
    if (gets(buf) && strcmp(buf, "done")) 
        if (strcmp(buf, "quit") == 0)
                longjmp(env, QUIT_PROCESS);
        if (strcmp(buf, "restart") == 0)
                longjmp(env, RETRY_PROCESS);
        return 1;
    return 0;
void process()
    printf("Enter items, followed by 'done'.\n");
    printf("At any time, you can type 'quit' to exit\n");
    printf("or 'restart' to start over again\n");
    nitems = 0;
    while (procItem());
void main()
    for ( ; ; ) 
        switch (setjmp(env)) 
            case 0:
            case RETRY_PROCESS:
                    printf("You typed in %d items.\n",
            case QUIT_PROCESS:

Do you know that?

46% of freelancers typically work for a client for one year or longer Next


Fast Payments
Payoneer sing up to get free