声明使得名字为程序所知,一个文件如果想使用其它文件定义的名字,则必须包含对那个名字的声明。定义负责创建与名字相关联的实体。
变量声明规定了变量的类型和名字,这一点与定义相同。但是定义还申请了内存空间,也会为声明的变量赋予一个初始朱。
如果想声明一个变量而非定义它,就得在变量名前加一个extern,而且不要显式地初始化它。
extern int i; // 声明一个int型变量i(无初始化)
int i; // 声明并且定义一个int型变量i(默认初始化)
任何包含了显示初始化的声明都是定义。我们可以给标记了extern的变量初始化,但是这就失去了声明的意义。
注意:在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
变量可以被多次声明,但是只能被定义一次。