volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。
对于线程共享的变量应该设置为volatile,不然编译器优化,会将该变量放入寄存器中,每次从寄存器中读取数据,导致获得不了该值已经改变。
======================================
函数指针变量和函数指针类型的区别:
/**
* @brief
* 定义了一个变量pFun,这个变量是个指针,指向返回值为空和参数为int的函数的指针!
*/
void (*pFun)(int);//变量
/**
* @brief 代表一种新类型,不是变量!所以与上述的pFun不一样!
*/
typedef void (*func)(void);//类型,注意区分意思
void myfunc(void) { cout << "asda" << endl; }
void glFun(int a) { cout << a << endl; }
int main() {
func pfun = myfunc; /*赋值*/
pfun(); /*调用*/
pFun = glFun;
(*pFun)(2);
}