volatile在setjmp()中的应用

hollebab 2014-06-01 08:12:32
书上说保证局部变量在longjmp过程中一直保持它的值的唯一可靠方法是把它声明为volatile.我看不大明白,用自己编的程序举个例子吧
#include <setjmp.h>
#include <stdio.h>
main()
{
volatile int n=0;//是不是说这里不是volatile的话,输出有可能会是0?
jmp_buf buff;
if(!setjmp(buff))
{
n=2;
longjmp(buff,1);
}
printf("%d\n",n);
}
...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hollebab 2014-06-02
  • 打赏
  • 举报
回复
我的意思很明白,我的意思是longjmp之后n=2这个值是否会被抛弃,以至于n=0.
废玻璃渣 2014-06-01
  • 打赏
  • 举报
回复
楼主代码给得不全,不太明白。 volatile主要用于解决多线程问题的,忽略编译器的优化,不直接从寄存器中读取(编译器认为的值),保证变量每次都重新读取(真实值),保证数据的可靠性

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧