static关键字
- 使用字面常量和变量对static修饰的局部变量的区别:(只进行一次赋值的原因)
- 字面常量初始化static:链接时不生成代码,因此只执行一次
- 变量初始化static:因为使用变量初始化const,编译器并不知道变量的初始值为多少,因此会生成代码,在第一次赋初值后,会将一个标志位由0置1
extern关键字
-
外部关键字将其他文件定义的全局变量和函数引入本文件,告诉编译器此函数/变量是在其中文件中定义的
-
示例:
// Test_01.cpp
# include<stdio.h>
int g_max = 10 ; // 这是变量的定义
void fun(){
printf("g_max = %d",g_max);
}
// Test_02.cpp
# include<stdio.h>
// 通过extern外部关键字调用其他文件中的全局变量和全局函数
extern int g_max ; // 这是变量的声明
extern void fun();
int main(){
fun();
return 0 ;
}
外部关键字extern和静态关键字static的联系
- 使用extern关键字可以调用其他文件中定义的全局变量和全局函数
- 给局部变量添加static静态关键字可以延长其寿命,但不能改变其可见性
- 对全局变量和全局函数添加static关键字,将改变其可见性,不改变其寿命。即对应的全局变量和全局函数的首名依然为程序执行时,但其对外部文件不可见,即使外部文件中使用外部关键字extern声明这些全局变量和全局函数