程序设计风格

1.最终目的是设计一个好的软件;

好软件的标准:

一,正确性-能完成需求中的所有要求;

二,可扩展性-易于修改;

三,高效的数据结构与算法;

四,易读性;

五,可移植性等;

大道至简。

2.变量名,宏定义,见名知义

3.空格和缩进

一致性和习惯用法

4. If(i==0){

//TODO

}

尽量用If()else if() else{} 而非switch(){case 1: break;//fall through};case0:case 1:case2: ;;;break;

5.enum,const,#define 代替魔数。

6.注释;简单而不过分简单;

7.数据结构与算法

最基本的:基本检索和排序;

8.界面  在进行设计的时候,必须考虑的问题包括:

•界面:应提供哪些服务和访问?界面在效能上实际成为服务的提供者和使用者之间的一

个约定。在这里要做的是提供一种统一而方便的服务,使用方便,有足够丰富的功能,

而又不过多过滥以至无法控制。

•信息隐藏:哪些信息应该是可见的,哪些应该是私有的?一个界面必须提供对有关部件

的方便访问方式,而同时又隐蔽其实现的细节。这样,部件的修改才不会影响到使用

者。

•资源管理:谁负责管理内存或者其他有限的资源?这里的主要问题是存储的分配和释放,

以及管理共享信息的拷贝等。

•错误处理:谁检查错误?谁报告?如何报告?如果检查中发现了错误,那么应该设法做

哪些恢复性操作?

一个界面要想成功,它就必须特别适合有关的工作—必须简单、通用、规范、其行为

可以预料及坚固等等,它还必须能很好地适应用户或者实现方式的变化。

9.应该先检查所有的变量是否都正确地进行了初始化。

对于测试,惟一的、最重要的规则就是必须做。

风格

全局变量用具有描述意义的名字,局部变量用短名字。

保持一致性。(缩进,空格等)

函数采用动作性的名字。(Send)

要准确。

以缩行形式显示程序结构。

使用表达式的自然形式。

利用括号排除歧义。

分解复杂的表达式。

要清晰。

当心副作用。

使用一致的缩行和加括号风格。

为了一致性,使用习惯用法。

用else-if 处理多路选择。(少用switch)

避免使用函数宏。

给宏的体和参数都加上括号。

给神秘的数起个名字。(#define,const,enum)

把数定义为常量,不要定义为宏。(const而非#define)

使用字符形式的常量,不要用整数。

利用语言去计算对象的大小。(sizeof)

不要大谈明显的东西。

给函数和全局数据加注释。

不要注释不好的代码,应该重写。

不要与代码矛盾。

澄清情况,不要添乱。

界面

隐蔽实现的细节。

选择一小组正交的基本操作。

不要在用户背后搞小动作。

在各处都用同样方式做同样的事。

释放资源与分配资源应该在同一层次进行。

在低层检查错误,在高层处理。

只把异常用在异常的情况。

排错

寻找熟悉的模式。

检查最近的改动。

不要两次犯同样错误。

现在排除,而不是以后。

取得堆栈轨迹。

键入前仔细读一读。

把你的代码解释给别人。

把错误弄成可以重现的。

分而治之。

研究错误的计数特性。

显示输出,使搜索局部化。

写自检测代码。

写记录文件。

画一个图。

使用工具。

保留记录。

测试

测试代码的边界情况。

测试前条件和后条件。

使用断言。(assert)

做防御性程序设计。

检查错误的返回值。

以递增方式做测试。

首先测试最简单的部分。

弄清所期望的输出。

检验那些应当保持的特征。

比较相互独立的实现。

度量测试的覆盖面。

自动回归测试。

建立自包容测试。

性能

自动计时测量。

使用轮廓程序。

集中注意热点。

画一个图。

使用更好的算法或数据结构。

让编译程序做优化。

调整代码。

不要优化无关紧要的东西。(不要过度优化)

收集公共表达式。

用低代价操作代替高代价操作。

铺开或者删除代码。

缓存频繁使用的值。

写专用的存储分配程序。

对输入输出做缓冲。

特殊情况特殊处理。

预先算出某些值。

使用近似值。

在某个低级语言里重写代码。

使用尽可能小的数据类型以节约存储。(char)

不存储容易重算的东西。

可移植性

盯紧标准。

在主流中做程序设计。

警惕语言的麻烦特性。

用多个编译系统试验。

使用标准库。

只使用到处都能用的特征。

避免条件编译。

把系统依赖性局限到独立文件里。

把系统依赖性隐藏在界面后面。

用正文做数据交换。

数据交换时用固定的字节序。

如果改变规范就应该改变名字。

维护现存程序与数据的相容性。

不要假定是A S C I I。

不要假定是英语。(国际化)

...............................................................................