3.extern int a;这条语句是对外部变量a的声明,即使其出现在一个函数的内部,也仍然具有相同的含义,因为这种形式的声明是对一个外部对象的显式引用。
如果语句int a = 7和语句int a = 9出现在同一个源文件中,将会出现什么样的情形呢?这个问题的答案与系统有关,不同的系统可能有不同的处理方式。严格的规则是,每个外部变量只能够定义一次。如果上述这种情况出现的话,大多数系统都会拒绝接受该程序。但是如果一个外部变量在多个源文件中定义却并没有指定初始值,那么某些系统会接受这个程序,而另外一些系统则不会接受。
4.两个具有相同名称的外部对象实际上代表的是同一个对象,即使编程者的本意并非如此,但系统却会如此处理。因此,如果在两个不同的源文件中都包含了定义:
int a;
那么,它或者表示程序错误,或者在两个源文件中共享a的同一个实例。static可以很好的解决这个问题。例如,如下声明语句:
static int a;
a的作用域将被限制在一个源文件内,对于其他源文件,a是不可见的。因此,如果若干个函数想要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以static修饰符声明。需要注意的是static同样可以适用于函数。