一、static 关键字的作用
答:
作用域方面:
1.限制变量的作用域(static全局变量);
2.设置变量的存储域(static局部变量)。
static 最主要功能是隐藏,其次因为 static 变量存放在静态存储区,具备持久性和默认值为 0
①隐藏作用,可以在不同的文件中定义同名变量和同名函数。
②对于变量来说,保持变量持久,静态数据区的变量会在程序刚刚运行时就完成初始化,也是唯一一次初始化;储存在静态数据区,静态存储区只有两种变量(全局变量和 static 静态变量)。
③默认初始化为 0x00,和全局变量一样的属性,减少程序员的工作量。
常见考题:
1、static全局变量与普通的全局变量有什么区别?
static全局变量只初使化一次,防止在其他文件单元中被引用;
2、static局部变量和普通局部变量有什么区别?
static局部变量只被初始化一次,下一次依据上一次结果值;
3、static函数与普通函数有什么区别?
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
二、const 关键字的作用
答:
(1)==可以定义 const 常量 ==
(2)==const 可以修饰函数的参数、返回值,甚至函数的定义体。==被 const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
三、volatile 关键字的作用
编译器优化的介绍: 内存访问速度远远比不上 CPU处理的速度,为了提高性能, 从硬件上引入高速缓存 cache,加速对内存的访问。 编译优化的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用 CPU 指 令流水线。
答:因为访问寄存器要比访问内存单元要快的多,编辑器会作减少存取的优化。
==当使用 volatile 声明函数变量的时候,系统总是重新从它所在的内存读取数据。 ==
遇到这个关键字声明的变量,编译器对访问该变量的代码不再进行优化,从而提 供对特殊地址的稳定访问; 如果不使用 valatile,编译器将对所声明的语句进行优化,以免出错。
volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
四、extern 关键字的作用
答:
引用一个已经定义过的全局变量
①函数内的局部变量,函数外定义的变量为全局变量,为静态存储方式,生存周期为整个程序,有效范围为定义变量的位置开始到本源文件结束。 如果在定义前想要引用该全局变量,则应该加上 extern 作为 “外部变量声明”。 多个源文件的工程想要引用一个源文件的外部变量也只许引用变量的文件中加 入 extern 关键字加以声明,但是可以在引用的模块内修改其变量的值,慎用。
②extern “C”: C++代码调用 C 语言代码。在 C++的头文件中使用。