首页 理论教育C语言程序设计第2版:extern变量

C语言程序设计第2版:extern变量

【摘要】:例5.12外部变量的使用。我们把例5.12稍加改动:存储类型标识符extern告诉系统,变量类型和名字已在别处定义过了,这里的extern int i;只是说明一下i是外部变量。如果外部变量的定义在使用之前,不用extern说明也可以;但如果定义在使用后面,说明就是不可缺少的了。最后应说明的是,外部变量提供了一种在函数间自由传递数据的机制,为编写程序带来了一些方便。但是,外部变量也有很大的副作用,它破坏了函数的封闭性,使程序的控制复杂起来。

任何在函数外部定义的变量都是外部变量。此外,外部存储类型也适用于函数,C语言规定,所有函数都是外部的。也就是说,函数只能定义在其他任何函数之外,而不允许函数定义中再出现函数定义。

外部变量的作用域可以是整个程序。一般来讲,如果没有特殊说明,外部变量的作用域是从定义处到本文件结束。在函数外说明了某些变量后,后面所有函数都可以对它们进行访问,外部变量的值在整个程序运行期间一直保存。

例5.12 外部变量的使用。

运行结果:

2

3

说明:由于i在所有函数之外定义,因此它是一个外部变量。在主函数main()中引用了i,先把它加1,然后输出值2,在函数f()中又一次访问它,再做加1运算后再输出值3。这里我们可以看出,外部变量的作用域不限于一个函数,在任何一个函数中改变变量的值,都将影响到其后使用它的函数。(www.chuimin.cn)

我们也可以在引用外部变量的函数中再使用存储类型说明符extern来说明。我们把例5.12稍加改动:

存储类型标识符extern告诉系统,变量类型和名字已在别处定义过了,这里的

extern int i;

只是说明一下i是外部变量。如果外部变量的定义在使用之前,不用extern说明也可以;但如果定义在使用后面,说明就是不可缺少的了(就像非整型函数)。

最后应说明的是,外部变量提供了一种在函数间自由传递数据的机制,为编写程序带来了一些方便。但是,外部变量也有很大的副作用,它破坏了函数的封闭性,使程序的控制复杂起来。所以,除非必要,一般不建议过多使用外部变量。