longjmp
Defined in header <setjmp.h>
|
||
---|---|---|
|
(until C11) | |
|
(since C11) |
Loads the execution context env
saved by a previous call to setjmp
. This function does not return. Control is transferred to the call site of the macro setjmp
that set up env
. That setjmp
then returns the value, passed as the status
.
If the function that called setjmp
has exited (whether by return or by a different longjmp
higher up the stack), the behavior is undefined. In other words, only long jumps up the call stack are allowed.
Jumping across threads (if the function that called setjmp was executed by another thread) is also undefined behavior.
|
(since C11) |
If when On the way up the stack,
|
(since C99) |
Parameters
env | - | variable referring to the execution state of the program saved by setjmp
|
status | - | the value to return from setjmp . If it is equal to 0 , 1 is used instead
|
Return value
(none).
Notes
longjmp
is intended for handling unexpected error conditions where the function cannot return meaningfully. This is similar to exception handling in other programming languages.
Example
#include <stdio.h>
#include <setjmp.h>
#include <stdnoreturn.h>
jmp_buf jump_buffer;
noreturn void a(int count)
{
printf("a(%d) called\n", count);
longjmp(jump_buffer, count+1); // will return count+1 out of setjmp
}
int main(void)
{
volatile int count = 0; // local vars must be volatile for setjmp
if (setjmp(jump_buffer) != 9)
a(count++);
}
Output:
a(0) called
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
References
C11 standard (ISO/IEC 9899:2011):
- 7.13.2.1 The longjmp macro (p: 263-264)
C99 standard (ISO/IEC 9899:1999):
- 7.13.2.1 The longjmp macro (p: 244-245)
C89/C90 standard (ISO/IEC 9899:1990):
- 4.6.2.1 The longjmp function
See also
saves the context (function macro) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/program/longjmp