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,编译器将确保它不会尝试优化对其的访问,并且代码应按预期工作。

09-09 19:02