关键字auto extern register static volatile

1 auto 仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候执行初始化操作,没有默认值。

2 extern 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。

3 register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。

  1)register变量必须是能被CPU所接受的类型

  2)因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址

  3)只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。

  4)局部静态变量不能定义为寄存器变量

  5)不能定义任意多个寄存器变量

4  C++的static有两种用法:

             面向过程程序设计中的static——普通变量和函数、不涉及类

            面向对象程序设计中的static——说明static在类中的作用

5 volatile是一个类型修饰符(type specifier),修饰被不同线程访问和修改的变量;如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。

原文地址:https://www.cnblogs.com/landy_mo/p/2011903.html