0 总结
longjmp与setjmp语句之间的变量赋值会丢失。...c = 30;
e = 50;
}
printf("a = %d,b = %d,c = %d,d = %d, e = %d\n", a, b, c, d, e);
return 0;
}
使用...O1编译
执行结果:b=20赋值丢失
$ gcc -o main3 -Wall -g -ggdb -O1 -g3 -gdwarf-2 main3.c
$ ..../main3
a = 10,b = 20,c = 30,d = 40, e = 50
2 原因与解法
编译器在O1优化下,把sigsetjmp与siglongjmp之间的局部变量赋值操作丢掉了。...对比:左侧gcc O0,右侧gcc O1
手册中已有说明,满足三个条件的变量赋值无效:
变量属于setjmp所在函数的局部变量:必须是栈上的变量。