一、volatile 修饰符
volatile标识一个变量意味着这个变量可能被非本程序的其他过程改变,例如某个访问这一变量的某中断程序。为变量加上这一标识可以禁止编译器的优 化,使程序正确地按设计者的意图运行。例如下面的程序,我们将intr_func注册为中断函数,某个中断发生时触发这一函数:
unsigned char flag = 1; int main(int argc, char **argv) { reg_intr(XXX, intr_func); while(flag) { printf("hello\n"); } return 0; } void intr_func(void) { flag = 0; }
当不加volatile时,编译器会直接将while条件中的flag换成1,因此即使中断发生也无法结束循环;如果给flag加上volatile标识,编译器就不会做前述的优化,程序得以按设计的意图工作。
原文:http://www.cnblogs.com/-liszt/p/3562559.html