1.5.2 编程风格
编写他人能够轻松阅读和修改的程序,便能够显著减轻维护负担。好的编程风格都是练习的结果,建议大家一开始就试着编写方便他人理解的程序。没有什么神奇公式能确保程序的可读性,不过还是有一些实用经验可介绍给大家。
1. 将程序分成相关的模块。
2. 为程序排版,使其结构清晰。
3. 编写易于理解的注释来解释程序。清晰准确地描述底层数据模型、用来表示数据模型的数据结构和每个例程所执行的操作。在描述例程时,要陈述对其输入作出的假设,并讲清输出和输入有什么关系。
4. 对例程和变量使用有意义的名称。
5. 尽可能避免使用明确的常数。例如,不要用数字7表示小矮人的个数,而是要使用诸如NumberOfDwarfs
这样定义的常量,这样一来,如果决定再加上一个小矮人,就可以很方便地将该常量的值改为8。
6. 避免使用“全局变量”,即不要为整个程序定义变量,除非程序中的大多数例程都要使用该变量所表示的数据。
另一个编程好习惯就是拥有成套测试输入,可以在编程时对每行代码进行测试。每当为程序增加了新功能,就可以运行这套测试,以确保新程序在处理这些起作用的输入时能和老程序行动一致。
1.6 本书中用到的一些C语言约定
在说明与C语言程序相关的概念时,有一些实用的定义和约定。其中一些是在标准头文件stdio.h
中也能找到的常规约定,而另一些则是为本书特别定义的,必须在使用它们的C语言程序中包含这些约定。
1. 标识符NULL
是指针的值,可能在任何出现指针的地方出现,但它是个不能指向任何内容的值。因此,出现在示例1.1链表节点的next
字段中的NULL
,可以用来表示链表的结尾。我们还将看到NULL
在其他的数据结构中也有着诸多类似的用途。NULL
在stdio.h
头文件中得到了恰当的定义。
2. 标识符TRUE
和FALSE
按如下方式定义
#define TRUE 1#define FALSE 0复制代码
因此,在任何需要逻辑值“真”的情况中都可以使用TRUE
,而在逻辑值为“假”的情况中都可以使用FALSE
。
3. 类型BOOLEAN
被定义为
typedef int BOOLEAN;复制代码
在强调要表示的是表达式的逻辑值而非数值时,就会使用BOOLEAN
。
4. 标识符EOF
是getchar()
这样的文件读操作函数在无法继续从文件读出字节时返回的值。stdio.h
文件为EOF
定义了一个合适的值。
5. 我们还要定义一个宏,用来生成示例1.1中所用节点的声明。图1-13就展示了一种可取的定义。它声明单元具有两个字段:element
字段的类型是由参数Type
给定的,而next
字段则指向具有本结构的单元。该宏提供了两项外部定义:CellName
是该类型结构体的名字,而ListName
则是指向这些单元的指针的类型名称。
#define DefCell(EltType, CellType, ListType) \typedef struct CellType *ListType; \struct CellType { \ EltType element; \ ListType next; \}复制代码
图 1-13 用来定义表中单元的宏
示例 1.6
通过使用宏
DefCell(int, CELL, LIST);复制代码
可以定义示例1.1中那种类型的单元。
该宏随后会扩展为
typedef struct CELL *LIST;struct CELL {
int element;
LIST next;}复制代码
这样一来,我们就可以使用CELL
作为整数单元的类型,并使用LIST
作为指向这些单元的指针的类型。例如
CELL c;LIST L;复制代码
定义了单元c
,以及指向单元的指针L
。请注意,通常会用指向表第一个单元的指针来表示一列单元,如果表为空,则用NULL
来表示。
1.7 小结
至此,大家应该已经从本章中了解到以下概念。
1.8 参考文献
Kernighan and Ritchie [1988]是C语言的经典参考书。Roberts [1994]对使用C语言的程序设计进行了很好的介绍。
Stroustrup [1991]创造了C语言的面向对象扩展版——C++,C++已被广泛用于系统的实现。Sethi [1989]对几种主要编程语言的设计模型进行了介绍。
Brooks [1974]有力地描述了大型软件系统开发中存在的技术难题和管理难题。Kernighan and Plauger [1978] 针对改善编程风格提出了一些忠告。
American National Standards Institute(ANSI) [1990]. Programming Language C, American National Standards Institute, New York.
Brooks, F. P. [1974]. The Mythical Man Month, Addison-Wesley, Reading, Mass.
Kernighan, B. W.,and P. J. Plauger [1978]. The Elements of Programming Style, second edition, McGraw-Hill, New York.
Kernighan, B.W.,and D. M. Ritchie [1988]. The C Programming Language, second edition, Prentice-Hall, Englewood Cliffs, New Jersey.
Roberts, E .S. [1994].The Art and Science of C: A Library Based Introduction to Computer Science,Addison-Wesley, Reading, Mass.
Sethi, R. [1989]. Programming Languages: Concepts and Constructs, Addison-Wesley, Reading, Mass.
Stroustrup, B. [1991]. The C++ Programming Language, second edition, Addison-Wesley, Reading, Mass.