程序:
#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应该不是那某个系统。