C++程序通常是由很多个file组成。为了让每个file能够使用同一个变量,C++特意把变量的声明和定义区别开来。
变量的定义,是指为变量分配内存,或者有时也为其设定一个初始值的操作。在程序中,同一个变量只能定义一次。
变量的声明,是让程序知晓变量的类型和名称。其实,变量的定义也是一种变量的声明的:当我们定义一个变量时,我们需要声明它的类型和名字。我们可以通过关键词extern来声明一个未定义的变量。当然,变量的声明也不仅仅是在变量类型和名字前面加上一个extern那样的定义。就如下面:
extern int i; //declares but not define i
int i; //declares and define i
通过extern来声明的变量,不是对变量的定义,也不会为变量分配内存。事实上,它的使用要求在程序的其他地方已经对该变量进行了定义。在一个完整的程序中,同一个变量可以声明多次,但是只能定义一次。
在声明变量时,可能会为变量设定一个初始值,但是这种操作会被认定为变量的定义,因为只有定义才可以为变量分配内存。那么,这个初始化程序必须拥有内存可以初始化。而且,一旦使用了初始化程序,不管这个声明里存不存在extern,这次操作都是变量的定义。譬如:
extern double pi=3.1416; //definition
不管有没有使用extern,这个语句都定义了pi,内存被分配给pi,并且初始值是3.1416。不过,需要注意的是,只有在函数外使用初始化操作的extern声明,才是合法的。