setjmp与longjmp

程序:

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

jmp_buf jmpbuf;

void test_fun();

int main(int argc, char* argv[])
{
  int a = 0;
  int flag = false;
  register int reg = 0;
  if (setjmp(jmpbuf) != 0)
  {
    printf("a:%d reg:%d\n", a, reg);
    flag = true;
    printf("error\n");
  }
  reg = -1;
  a = 10;
  if (!flag)
    test_fun();
  exit(0);
}

void test_fun()
{
  longjmp(jmpbuf, 1);
}
运行结果:

a:10 reg:-1
error

某个系统的的setjmp手册页上说:存放在存储器中的变量将具有longjmp时的值,而存放在CPU或浮点寄存器中的变量将具有setjmp时的值。我猜我的Linux version 2.6.38-12-generic应该不是那某个系统。

原文地址:https://www.cnblogs.com/liuyang1012525/p/2280115.html