-
volatile
提醒编译器他后面定义的变量随时都有可能改变,程序读写该变量的时候都会直接从变量地址读取。 - 如果没有
volatile
关键字,编译器可能优化读写,可能暂时使用寄存器中的值。如果别的程序修改这个变量的话就会出现不一致的现象。 - 没有
volatile
也可能能正常运行,但是可能修改编译器的优化级别之后就又不能正常运行了。因此经常会出现debug版本正常,但是release版本却不能正常的问题。所以为了安全起见,只要是等待别的程序修改某个变量的话,就加上volatile关键字。
一般来说,volatile
用在以下几个地方:
- 中断服务程序中修改的供其它程序检测的变量;
- 多任务环境各任务间共享的变量;
- 存储器映射的硬件寄存器;
参考文章:详解C中volatile关键字