跳转至

第十章 程序结构


局部变量

在函数体内或程序块内声明的变量叫局部变量。

局部变量有如下性质:

  • 自动存储期限。局部变量的存储单元在函数被调用时分配的,在函数返回时收回。

  • 块作用域。作用域是可以引用该变量的代码文本部分。局部变量的作用域在程序块中,外部不可访问。

静态局部变量

使用static声明局部变量使其成为静态局部变量,它具有静态存储期限,而不再是自动存储期限。

静态变量拥有永久的存储单元,在整个程序的执行期间都会保留。

静态局部变量的作用域仍是块作用域。

形式参数

形式参数拥有和局部变量一样的性质,即自动存储期限和块作用域。

其区别在于它是被实参初始化的。

外部变量

参数是给函数传递信息的一种方法。另一种方法就是使用外部变量(external variable)。

外部变量声明于函数体外,也叫全局变量。它有如下性质:

  • 静态存储期限。如同在函数体内声明的static局部变量,静态存储期限的变量都会永久保留。

  • 文件作用域。外部变量的作用域为其声明处到文件末尾。

外部变量的利弊

使用外部变量容易引发的问题:

  • 在维护期间,如果改变了外部变量,那么就要检查引用了该外部变量的所有函数,以确认此变化对这些函数的影响

  • 如果外部变量的值错误,那么比较难定位是哪个函数赋予它错误的值

  • 使用了外部变量的函数难以复用,因为此函数不再独立,而是依赖于此外部变量

要给外部变量起一个健全的名字,这样才不容易和其他变量混淆。

程序块

程序块就是这样的代码结构:

{ 
    多条声明
    多条语句
}

在程序块中声明的变量具有自动存储期限,出块时收回存储单元,其作用域在块内。

函数体就是一个程序块。

作用域

当程序块内的声明命名了一个标识符时,如果此标识符已经可见(被其它地方声明并且可引用),那么新的声明就会”隐藏“旧的声明。

构建C程序

一个可能的编排程序的顺序:

  • #include指令

  • #define指令

  • 类型定义

  • 外部变量的声明

  • 除main函数之外的函数的原型

  • main函数的定义

  • 其它函数的定义