为何要用extern变量

为什么要用extern变量
首先看extern变量的解释
"extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义"。
extern关键字的作用我很清楚。

但我不清楚 这种使用,为什么要这么使。比如

a.h文件中
extern int aa;
a.c文件中
int aa=0;

那为什么不直接在a.h文件中
int aa;
而在a.c文件中aa=0;
又或者直接在a.h文件中
int aa=0;

我试了都是可以编译通过的。

(这个问题相当于我在问,雨伞有什么用,因为我是个来自从来不下雨的星球,所以即使看到了文字方面的解释,还是不清楚到底在什么情况下需要用它)

------解决方案--------------------
请遵守one definition rule(ODR, 一次定义规则),思考一下“重复定义”是怎么出来的。
------解决方案--------------------
定义写在头文件中会导致重复定义。
------解决方案--------------------
引用:
定义写在头文件中会导致重复定义。

+1
------解决方案--------------------
extern 是声名语句,当然要放到.h文件里了
extern int A 就是说 A 是外部变量,其他文件可以用这个变量。
比如 你有4个文件 1.h  2.h  1.c  2.c  
你在1.h中加入extern int A
  在2.h中加入extern  A
那么在2.c中你就可以使用A变量了,而且这个A变量就是1.h中的A变量

你可以到百度收 auto, register ,extern,static,哪里有详细的解释
------解决方案--------------------
全局变量要定义在源文件中。需要放在头文件中的有全局变量(不包含静态变量)的声明(注意是声明而不是定义)、全局函数(不包括静态函数的声明)的声明。
若把全局变量定义在头文件中,可能会造成重定义。
------解决方案--------------------
引用:
定义写在头文件中会导致重复定义。

++