c语言volatile关键字的理解和使用

文章目录

  • 1 volatile的理解
  • 2 volatile的使用


>>返回总目录<<

1 volatile的理解

volatile总是与编译器的优化有关,编译器在进行数据流分析时,分析程序中变量在哪里赋值、使用或失效,分析结果可用于常量合并、传播等优化。但有时这些优化不是程序所需要的,此时可通过volatile禁止这些优化。
volatile提示编译器它所修饰的变量随时都有可能发生变化,因此程序每次需要读取这个变量的时候,都会直接从变量地址中读取数据,而不会从寄存器或者缓存中读取。

2 volatile的使用

一般在软件调试过程会用到volatile关键字,如下代码,定义了volatile全局变量testFlag,TestFunction函数是周期调用的,可以通过在调试器界面更改testFlag变量的值,进而控制程序执行。此时testFlag会在程序外随时被改变,所以需要通过volatile使程序每次都从内存中读取最新的值。

volatile int testFlag = 0u;

void TestFunction(void)
{
	if(testFlag == 1u)
	{
		DoSomething1();
		testFlag = 0u;
	}
	
	if(testFlag == 2u)
	{
		DoSomething2();
		testFlag = 0u;
	}
}

你可能感兴趣的:(c语言,c语言)