关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,改变量的值任可能会被外界修改。操作系统,硬件,或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改,因此,每一次使用时,编译器都会重新从内存中获取这个值。
volatile(易变)的整数可由下面的语句声明:
int volatile x;
volatlie int x;
要声明指向volatile整数的指针,可以这么做:
volatile int* x;
int volatile *x;
指向非volatile数据的volatile指针很少见,但也是可行的。
int * volatile x;
如若声明执行指向一块volatile内存的volatile指针变量(指针本身与地址所指的内存都是volatile),做法如下:
int volatile *volatile x;
volatile变量不会被优化掉,这非常有用。设想有下面这个函数:
int opt=1;
void Fn(void){
start:
if (opt==1) goto start;
else break;
}
咋一看,上面的代码好像会进入无限循环,编译器可能会将这段代码优化成:
void Fn(void)
{
start:
int opt=1;
if(true)
goto start;
}
|