Volatile:
一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译
器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必
须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是 volatile 变量的几个例子:
1).并行设备的硬件寄存器(如:状态寄存器)
2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariabl
es)
3).多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认为这是区分 C 程序员和嵌入式
系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS 等
等打交道,所用这些都要求 volatile 变量。不懂得 volatile 内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微
深究一下,看一下这家伙是不是直正懂得 volatile 完全的重要性。
1).一个参数既可以是 const 还可以是 volatile 吗?解释为什么。
2).一个指针可以是 volatile吗?解释为什么。
3).下面的函数有什么错误:
intsquare(volatileint*ptr)
{
return*ptr**ptr;
}
下面是答案:
1).是的。一个例子是只读的状态寄存器。它是 volatile 因为它可能被意想
不到地改变。它是 const 因为程序不应该试图去修改它。