自动变量如何变化?

时间:2014-07-25 11:16:27

标签: c

我知道在文件范围定义的volatile个变量。编译器不允许对这些变量进行假设。它们几乎可以随时更改,编译时不能优化变量的读取。

现在我找到了这段代码

BOOL InstallHandler()
{
    volatile BOOL b_bulk_erase = FALSE;
    volatile BOOL b_test_read_write = FALSE;
    volatile BOOL b_continue = TRUE;
    ...
    if (b_test_read_write)
    {
        read();
        write();
    }
}

volatile如何对应于堆栈的变量,即由一个线程拥有?

编辑:

由一个线程拥有,我想表达该变量未公开。地址不会给予其他任何内容。任何其他线程都不使用它。

2 个答案:

答案 0 :(得分:5)

好的,我意识到这种不稳定的意图。

该功能是与硬件设备通信的设备驱动程序的一部分。在正常操作期间不使用函数readwrite

但是当开发人员在调试器中运行程序时,她可以在if子句中设置断点并使用调试器更改变量。这将允许操纵执行并呼叫readwrite

volatile禁止自if子句测试const表达式以来可能的优化。如果没有volatile整个if可能不在代码中。

答案 1 :(得分:4)

只是因为,虽然变量本身在一个线程中,但没有什么能阻止你将其地址提供给其他线程。因此无法预见的修改。