首页 理论教育 C语言程序设计中的外部变量与作用域

C语言程序设计中的外部变量与作用域

时间:2023-11-23 理论教育 版权反馈
【摘要】:外部变量可被作用域内的所有函数直接引用,所以外部变量又称为全局变量。外部变量的初值在编译时自动初始化成0。当需要增加函数的返回值时,可以使用外部变量。本例中,在函数convertime()中求得的外部变量hh、mm、ss的值,在main()中仍然有效,从而实现了函数之间的数据传递。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不提倡使用外部变量。外部变量的定义和外部变量的声明是两回事。

C语言程序设计中的外部变量与作用域

1.外部变量的概念和定义

在函数外部定义的变量称为外部变量。外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本源文件结束为止。外部变量可被作用域内的所有函数直接引用,所以外部变量又称为全局变量。

【例6.14】输入以秒为单位的一个时间值,将其转化成“时:分:秒”的形式输出。

程序运行情况如下:

本例在程序开始处定义了外部变量hh、mm、ss,其作用域是整个源程序文件,main()和convertime()函数中可以直接使用,不必再定义。外部变量的初值在编译时自动初始化成0。在main()函数中先输出变量hh、mm、ss的值0是编译系统自动初始化的结果,输入一个秒值到变量seconds中调用convertime()函数完成转化过程,返回main()函数后输出转化后的结果。

从本例可以看出,外部变量是除参数和函数返回值外函数之间进行数据传递的又一种方式。由于C语言中的函数只能返回一个值。当需要增加函数的返回值时,可以使用外部变量。本例中,在函数convertime()中求得的外部变量hh、mm、ss的值,在main()中仍然有效,从而实现了函数之间的数据传递。

2.说明

(1)外部变量可以加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不提倡使用外部变量。

(2)在同一源文件中,允许外部变量和内部变量同名。同名时,在内部变量的作用域内,外部变量将被屏蔽而不起作用。

【例6.15】外部变量与内部变量同名。

程序运行结果如下:(www.xing528.com)

max=8

本例中,main()函数中定义的内部变量a与外部变量同名,max()函数中定义的形参a、b也与外部变量同名。因此,在main()函数中,外部变量a被屏蔽,调用max()函数的实参a是内部变量,值为8,实参b是外部变量,值为5;在max()函数中,外部变量a、b均被屏蔽,形参a、b的值为实参所传递,分别为8和5,所以输出结果为8。

从上例可以看出,外部变量与内部变量同名时容易混淆其作用域,因此在程序设计中应尽量避免其同名。

(3)外部变量的作用域是从定义点开始到本源文件结束为止。如果定义点之前的函数需要引用这些外部变量,需要在这些函数内对被引用的外部变量进行声明。

外部变量声明的一般形式为:

extern 类型名 外部变量 [,外部变量2…];

通过对外部变量的声明,将其作用域延伸到定义它的位置之前的函数中。

外部变量的定义和外部变量的声明是两回事。外部变量的定义必须在所有的函数之外,并且只能定义一次。而外部变量的声明出现在要使用该外部变量的函数内,并且可以出现多次。外部变量在定义时分配内存单元,并且可以初始化;外部变量声明时,不能再赋初值,只是表明在该函数内要使用这些外部变量。例如,例6.14的程序也可以编写成如下形式:

程序运行情况如下:

上面程序的功能和运行结果与例6.14的完全相同。外部变量hh、mm、ss和函数convertime()的定义位置在main()函数的定义之后,因此,在main()函数中要引用外部变量hh、mm、ss,就必须先声明,使其作用域延伸到该函数中才能引用。同理,在main()函数中对所要调用的convertime()函数也先做了声明。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈