七、用函数实现模块化程序设计——局部变量和全局变量

变量的作用域问题。

1、局部变量

1.1、定义变量可能有3种情况:

  1. 在函数的开头定义
  2. 在函数内的复合语句内定义
  3. 在函数的外部定义
    在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数以外是不能使用这些变量的。在复合语句内定义的变量只在本复合语句范围内有效,只有在本复合语句内才能引用它们,在该复合语句之外是不能使用这些变量的,以上这些称为“局部变量”。
    主函数中定义的变量也只在主函数中有效,并不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。
    不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰。
    形式参数也是局部变量。其他函数可以调用被调用函数,但是不能直接引用被调函数的形参。
    在一个函数的内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或者“程序块”,离开该复合语句该变量就无效,系统会把它占用的内存单元释放。

2、全局变量

程序的编译单位是源程序文件,一个源程序文件可以包含一个或若干个函数。在函数的内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。
在一个函数中既可以使用本函数中的局部变量,也可以使用有效的全局变量。

2.1、设置全局变量的作用

增加了函数间的数据联系的渠道。由于同一文件中的所有函数都能引用全局变量的。相当于各个函数间有直接的传递通道。由于函数的调用只能带回一个返回值,因此有时可以利用全局变量来增加函数间的联系渠道,通过函数调用能得到一个以上的值。

2.2、建议不在必要时不要使用全局变量,原因:

  1. 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
  2. 它使函数的通用性降低了,因为如果在函数中引用了全局变量,那么执行情况会受到有关的外部变量的影响,如果将一个函数移到另一个文件中,还要考虑把有关的外部变量及其值一起移过去。但是若该外部变量与其他文件的变量同名时,就会出现问题。这就降低了程序的可靠性和通用性。在程序设计中,在划分模块时要求模块的“内聚性”强、与其他模块的相互影响要尽量小,而用全局变量是不符合这个原则的。一般要求把C 程序中的函数做成一个相对的封闭体,除了可以通过“实参-形参”的渠道与外界发生联系外,没有其他渠道。这样的程序移植性好,可读性强。
  3. 使用全局变量过多,会降低程序的清晰性,人们往往难以清楚的判断出每个瞬间时各个外部变量的值。因此,要限制使用全局变量。
  4. 如果在同一个源文件中,全局变量与局部变量重名,这时会出现什么情况呢?在局部变量的作用范围内,局部变量有效,全局变量被“屏蔽”,即它不起作用。

猜你喜欢

转载自blog.csdn.net/lijiahao1212/article/details/129967781