为了支持分离式编译,c++语言将声明和定义区分开来。声明只有名字并无实体,定义创建于声明名字相关的实体。因此声明和定义最重要的区别:声明不申请存储空间,定义申请存储空间。变量能且只能被定义一次,但是可以被多次声明。注意这里说的变量定义和变量赋值是分开的,例如:
int i=3;//定义
int i=4;//错误,重复定义
i=4;//正确,对i赋值
如果只想声明一个变量而并非定义它,可以在变量名字之前添加extern,而且不要现实地初始化变量:
extern int i;//声明i
int j;//声明并定义j
声明和定义的区别看起来并不大,但实际上很重要。例如,如果要在多个文件中使用同一变量,就必须将声明和定义分离。此时,变量的定义必须且只能出现在一个文件中(赋值无限制),其他利用该变量的文件必须对其进行声明(extern),但不能重复定义。
因此,最好在第一次使用变量时再定义它。