Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      longjmp

      From cppreference.com
      <c‎ |program
       
       
      Program support utilities
      Program termination
      Unreachable control flow
      Communicating with the environment
      Memory alignment query
      Signals
      Signal types
      Non-local jumps
      longjmp
      Types
       
      Defined in header<setjmp.h>
      void longjmp(jmp_buf env,int status);
      (until C11)
      _Noreturnvoid longjmp(jmp_buf env,int status);
      (since C11)
      (until C23)
      [[noreturn]]void longjmp(jmp_buf env,int status);
      (since C23)

      Loads the execution contextenv saved by a previous call tosetjmp. This function does not return. Control is transferred to the call site of the macrosetjmp that set upenv. Thatsetjmp then returns the value, passed as thestatus.

      If the function that calledsetjmp has exited (whether by return or by a differentlongjmp 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 calledsetjmp was executed by another thread) is also undefined behavior.

      (since C11)

      If whensetjmp was called, aVLA or anothervariably-modified type variable was in scope and control left that scope,longjmp to thatsetjmp invokes undefined behavior even if control remained within the function.

      On the way up the stack,longjmp does not deallocate any VLAs, memory leaks may occur if their lifetimes are terminated in this way:

      void g(int n){int a[n];// a may remain allocated    h(n);// does not return}void h(int n){int b[n];// b may remain allocated    longjmp(buf,2);// might cause a memory leak for h's b and g's a}
      (since C99)

      Contents

      [edit]Parameters

      env - variable referring to the execution state of the program saved bysetjmp
      status - the value to return fromsetjmp. If it is equal to0,1 is used instead

      [edit]Return value

      (none)

      [edit]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.

      [edit]Example

      Run this code
      #include <stdio.h>#include <setjmp.h>#include <stdnoreturn.h> jmp_buf my_jump_buffer; noreturnvoid foo(int status){printf("foo(%d) called\n", status);    longjmp(my_jump_buffer, status+1);// will return status+1 out of setjmp} int main(void){volatileint count=0;// modified local vars in setjmp scope must be volatileif(setjmp(my_jump_buffer)!=5)// compare against constant in an if        foo(++count);}

      Output:

      foo(1) calledfoo(2) calledfoo(3) calledfoo(4) called

      [edit]References

      • C17 standard (ISO/IEC 9899:2018):
      • 7.13.2.1 The longjmp macro (p: 191-192)
      • 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

      [edit]See also

      saves the context
      (function macro)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/program/longjmp&oldid=154421"

      [8]ページ先頭

      ©2009-2025 Movatter.jp