volatile关键字

volatile的作用是
作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
简单地说就是防止编译器对代码进行优化.

一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
volatile关键字
在Makefile文件中加入优化
volatile关键字
ps:对优化简单说明
-O 提供基础级别的优化
-O2 提供更加高级的代码优化,会占用更长的编译时间
-O3 提供最高级的代码优化
详细参考博客:编译优化-O -O2 O3
期运行结果为:
volatile关键字

解释:main函数中的flag一直没有变化,因为编译时加上了-O3优化,所以操作系统会直接将flag加到寄存器中,当捕捉到2号信号时,handler()中的flag为内存 中的,所以当处理函数返回时,main()函数中的flag依旧不会变。
volatile关键字
Makefile文件不变
再次运行结果如下:
volatile关键字
代码中加给flag加上volatile关键字,防止flag被优化,因此handler()中的flag和main中的flag是同一个。