volatile int vfoo = 0;
void func()
{
int bar;
do
{
bar = vfoo; // L.7
}while(bar==1);
return;
}
此代码忙于等待变量变为1
。如果在第一遍中vfoo
未设置为1
,我会卡在里面吗。
此代码编译时没有警告。标准对此有何说法?
vfoo
声明为volatile
。因此,应not优化对该变量的读取。volatile
限定的。是否允许编译器优化对此bar
的写入?即编译器将对vfoo
进行读取访问,并允许丢弃此值而不将其分配给bar
(在L.7)。volatile变量必须在任何访问中读取。在您的代码片段中,无法优化此读取。编译器知道bar可能会受到副作用的影响。这样就可以正确检查条件。