volatile在setjmp()中的应用,该怎么解决

volatile在setjmp()中的应用
本帖最后由 hollebab 于 2014-06-01 20:23:47 编辑
书上说保证局部变量在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);
 }

------解决方案--------------------
楼主代码给得不全,不太明白。
volatile主要用于解决多线程问题的,忽略编译器的优化,不直接从寄存器中读取(编译器认为的值),保证变量每次都重新读取(真实值),保证数据的可靠性