在全局的int a;和int a=1;有什么区别?解决方法

在全局的int a;和int a=1;有什么区别?
今天在gcc下写程序时发现一个问题:
我在全局的声明
C/C++ code

int a;
int a;


可以写无数个int a;重复声明不报错。而在函数中这么写编译器会报重复声明错误。
而只能写一个int a = 1;这是为什么?不理解。
int a;有没有给a分配内存空间?



------解决方案--------------------
用int a是定义了一个变量,不使用关键字定义存储类型的话,这个变量就是extern型(external)的。
但是这个用extern型定义一个变量和用extern关键字引用性声明一个变量是不一样的。
之前你在int a = 1;这里也是定义了一个变量,这个外部变量是extern型的,所以就是重复定义。

一个变量是声明,必须同时满足两个条件,否则就是定义:
(1)声明必须使用extern关键字;(2)不能给变量赋初值