1、怎样声明才可以使得变量能够在编译期间被恰当地声明?
2、怎样安排声明才能使得所有的声明片段都可以在程序载入时被连接?
3、声明怎么安排才能够只被复制一次?
4、外部变量如何初始化?
回答上述问题就涉及到变量在程序中的存在范围(scope),即那些函数可以访问到哪些变量。
区分外部变量的定义和声明非常重要:一个声明只是表明变量的属性(主要是类型);而定义除此之外还会进行内存分配预留(set aside)。
int sp;
double val[MAXVAL];
如果是在所有函数之外声明的(如在头文件中声明的),那么就相当于于定义了外部变量sp和val,引起内存分配,同时也可以作为代码文件其余部分的声明。
extern int sp;
extern double val[ ];
这两行代码则只是为代码文件的其余部分做了声明,即sp是int类型,val是double array类型,其大小在别的地方已经决定了,但是它们不能创建变量,也不能预留内存。
外部变量的初始化只能由定义来完成。
对于所有文件中的外部变量,只能定义一次。当别的文件要访问其时,要用关键字extern来表明。当然,数组的大小可以在定义中决定,也可以在extern declaration中决定。