1、普通局部变量
-------------定义形式:在{}里面定义的 普通变量
叫做 普通局部变量
-------------作用范围:所在的 {}
复合语句之间有效
-------------生命周期:所在的 {}
复合语句之间有效
-------------存储区域:栈区
-------------注意事项
(1)、普通局部变量 不初始化 内容 不确定
(2)、普通局部变量 重名 就近原则(尽量别重名)
void test02()
{ // 复合语句
int num = 10; // 局部变量
{
int num = 20; // 局部变量
printf("num = %d\n", num); // 就近原则
}
printf("num = %d\n", num);
}
int main(int argc, char const *argv[])
{
test02();
return 0;
}
2、普通全局变量
-------------定义形式:在函数外定义的普通变量
-------------作用范围:当前源文件以及其他源文件有效
-------------生命周期:整个进程
-------------存储区域:全局区
-------------注意事项
(1)、全局变量不初始化,内容为 0
(2)、全局变量 和 局部变量 重名,优先使用 局部变量(就近原则,最好不要这么干)
int data = 10; // 普通全局变量不初始化,内容为 0
void test03()
{
int data = 20; //普通局部变量
printf("data = %d\n", data);
}
int main(int argc, char const *argv[])
{
test03();
return 0;
}
(3)、其他文件使用全局变量必须对全局变量使用extern声明,extern声明外部可用,该变量或者函数来自于其他源文件(变量的使用所在的源文件)
extern void add(); // 来自于其他源文件的函数
int data = 10; // 普通全局变量不初始化,内容为 0
void test03()
{
printf("本文件中的data = %d\n", data);
add();
}
int main(int argc, char const *argv[])
{
test03();
return 0;
}
// extern声明int类型的data数据,该数据来自于其他源文件
#include <stdio.h>
extern int data;
void add()
{
data = data + 1;
printf("来自于其他文件的 data = %d\n", data);
}
多文件编译是为了让编译器知道本文件使用 extern 引用了哪些外部文件的变量!!!!!!!