⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jump.cc

📁 C++ source code for book-C++ and Object Oriented Numeric computing for scientists and engineers
💻 CC
字号:
/* 
 * sample program illustrating the use of long jump (jump between functions) 
 */ 

#include <iostream>
#include <setjmp.h>


// The output of this program should be: 0 1 2 3

void f(jmp_buf envbuf) {
  std::cout << 1 << " ";

  // jump to the point of last call of setjmp() and set return status to 2
  longjmp(envbuf, 2);

  // never be executed
  std::cout << 5 << " ";
}

int main() {
  jmp_buf envbuf;           // jmp_buf is defined in <setjmp.h>
  bool first = true;

  // The first time program execution comes to this point, return status
  // is 0. Later a call longjmp(envbuf, 2) causes program execution to
  // come back to this point and return status is set to 2.

  int status = setjmp(envbuf);

  std::cout << status << " ";

  if (first) {
    first = false;
    f(envbuf);
  }

  std::cout << 3 << std::endl;
}

/*
// longjmp() causes program execution to resume at the point of last call
// to setjmp(). longjmp() must be called before the function that called
// setjmp() returns. Should not set "status to 0
// structure jmp_buf is defined in <setjmp.h>

void longjmp(jmp_buf envbuf, int status);

// setjmp(envbuf) saves the enviroment (stack) in "envbuf". It returns 0 if
// successful when it is first called. Later, a call to longjmp(envbuf, status)
// resets the stack as described in "envbuf" and causes the return value to
// be "status". The return value can be used to determine where the long
// jump came from.

int setjmp(jmp_buf envbuf);
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -