第十章 程序结构
局部变量
在函数体内或程序块内声明的变量叫局部变量。
局部变量有如下性质:
-
自动存储期限。局部变量的存储单元在函数被调用时分配的,在函数返回时收回。
-
块作用域。作用域是可以引用该变量的代码文本部分。局部变量的作用域在程序块中,外部不可访问。
静态局部变量
使用static声明局部变量使其成为静态局部变量,它具有静态存储期限,而不再是自动存储期限。
静态变量拥有永久的存储单元,在整个程序的执行期间都会保留。
静态局部变量的作用域仍是块作用域。
形式参数
形式参数拥有和局部变量一样的性质,即自动存储期限和块作用域。
其区别在于它是被实参初始化的。
外部变量
参数是给函数传递信息的一种方法。另一种方法就是使用外部变量(external variable)。
外部变量声明于函数体外,也叫全局变量。它有如下性质:
-
静态存储期限。如同在函数体内声明的static局部变量,静态存储期限的变量都会永久保留。
-
文件作用域。外部变量的作用域为其声明处到文件末尾。
外部变量的利弊
使用外部变量容易引发的问题:
-
在维护期间,如果改变了外部变量,那么就要检查引用了该外部变量的所有函数,以确认此变化对这些函数的影响
-
如果外部变量的值错误,那么比较难定位是哪个函数赋予它错误的值
-
使用了外部变量的函数难以复用,因为此函数不再独立,而是依赖于此外部变量
要给外部变量起一个健全的名字,这样才不容易和其他变量混淆。
程序块
程序块就是这样的代码结构:
{
多条声明
多条语句
}
在程序块中声明的变量具有自动存储期限,出块时收回存储单元,其作用域在块内。
函数体就是一个程序块。
作用域
当程序块内的声明命名了一个标识符时,如果此标识符已经可见(被其它地方声明并且可引用),那么新的声明就会”隐藏“旧的声明。
构建C程序
一个可能的编排程序的顺序:
-
#include指令
-
#define指令
-
类型定义
-
外部变量的声明
-
除main函数之外的函数的原型
-
main函数的定义
-
其它函数的定义