Home »

What is the difference between goto and longjmp() and setjmp()?

Question ListCategory: cWhat is the difference between goto and longjmp() and setjmp()?
jeanderson295 author asked 8 years ago
1 Answers
shah_kajal184 author answered 8 years ago

A goto statement implements a local jump of program execution, and the longjmp() and
setjmp() functions implement a nonlocal, or far, jump of program execution.

Generally, a jump in execution of any kind should be avoided because it is not considered

good programming practice to use such statements as goto and longjmp in your program.

A goto statement simply bypasses code in your program and jumps to a predefined position.

To use the goto statement, you give it a labeled position to jump to. This predefined position

must be within the same function. You cannot implement gotos between functions.

When your program calls setjmp(), the current state of your program is saved in a structure

of type jmp_buf. Later, your program can call the longjmp() function to restore the program’s

state as it was when you called setjmp().Unlike the goto statement, the longjmp() and

setjmp() functions do not need to be implemented in the same function.

However, there is a major drawback to using these functions: your program, when restored

to its previously saved state, will lose its references to any dynamically allocated memory

between the longjmp() and the setjmp(). This means you will waste memory for every

malloc() or calloc() you have implemented between your longjmp() and setjmp(), and your

program will be horribly inefficient. It is highly recommended that you avoid using functions

such as longjmp() and setjmp() because they, like the goto statement, are quite often an

indication of poor programming practice.

Please login or Register to Submit Answer