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