外部变量
外部变量
外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。简单使用
int e_extern = 10; //编译器自动编译为extern int e_extern = 10;
聊聊声明和定义
- 全局变量没有赋值,就是声明
- 函数可以有多个声明,全局变量可以有多个声明
- 函数只能有一个定义,全局变量有一个定义
- 定义就是全局变量的实体,声明变量只是全局变量存在
具体看看代码,全局变量
int num; //声明
int num;
int num;
int num = 10; //定义
int num = 20; //如果再次定义的话,就会出现error C2374: “num”: 重定义;多次初始化
局部变量
void test()
{
int num = 10; //auto类型的变量 在作用域内不能重复定义
int num = 20; //两次都是定义,自动变量没有声明的,出现error C2374: “num”: 重定义;多次初始化
}
初始化
int num; //声明
int arr[10];
int main(int argc, char *argv[])
{
printf("%d\n", num); //如果不进行初始化,编译器会将该变量自动初始化为0,变量/数组和结构体也是初始化为0
for (int i = 0; i < 10; i++)
{
printf("arr[%d]=%d ", i, arr[i]);
}
system("pause");
return 0;
}
局部 外部变量
int main(int argc, char *argv[])
{
{
extern int a; //声明a的可见域是在当前块内,在外部无法使用
printf("a=%d\n", a);
}
system("pause");
return 0;
}
理清外部变量
int num;
int main(int argc, char *argv[])
{
{
//块语句内部的变量如果与全局变量重名,在当前块语句是从定义到块语句结束
//内层块语句的变量如果与外层块语句变量重名,则该变量的作用是内层块语句定义到块语句结束
//内层的变量会屏蔽外层的变量
printf("num1=%d\n", num);
int num = 100;
printf("num2=%d\n", num);
{
printf("num3=%d\n", num);
int num = 168;
printf("num4=%d\n", num);
}
printf("num5=%d\n", num);
}
printf("num6=%d\n", num);
system("pause");
return 0;
}
多文件使用使用外部变量
global.c
int global_val = 10;
main.c
extern int global_val; //引用全局变量,跨文件使用,extern可以省略,但要声明,全局变量的作用域是全局的,但有可见域,要使用合适的声明,声明就是全局变量的可用域
int main(int argc, char *argv[])
{
printf("global_val=%d", global_val);
system("pause");
return 0;
}
与外部变量对比的,就是静态变量,具体点击查看静态变量
秋风
2016-09-05