Possible Duplicate:
What is the difference between these declarations in C?
挥发物的目的是什么?
最佳答案
基本上,Volatile告诉编译器不要对要对其应用的“对象”执行任何优化。
当可以在程序范围之外更改对象时,这很有用。
一个例子(还有其他例子)是关于嵌入式系统的。假设您有一台带有内存映射键盘的设备。每当用户按下一个键时,该键的ASCII码就会显示在内存位置0xff00
中(例如)。
因此,您从代码开始:
char *kbdata = 0xff00;
然后,每当您要等待按键按下时,都可以轮询:
char key = *kbdata;
while (key == 0)
key = *kbdata;
唯一的问题是,编译器可能会发现代码中的所有内容都没有更改
*kbdata
,因此它可以优化访问,以使代码不再起作用。很有可能一旦将*kbdata
加载到密钥中,然后进入无限循环。通过将
kbdata
指定为volatile,编译器将确保它不会尝试优化对其的访问,并且代码应按预期工作。