您的位置:首页 > 编程语言 > C语言/C++

《高质量程序设计指南C/C++》 林锐 韩永泉编著 总结2

2015-08-04 21:43 405 查看
第 3 章 命名规则

1.共性规则:

规则1.标识符应当直观且可以拼读,可望文知意,不必进行“解码”。

规则2.标识符的长度应当符合“min-length&& max-information”原则。

规则3.命名规则尽量与所采用的操作系统或开发工具的风格保持一致。

规则4.程序中不要出现仅靠大小写区分的相似的标识符。

例如:

int x, X; // 变量 x 与 X 容易混淆

void foo(int x); // 函数 foo 与 FOO 容易混淆

void FOO(float x);

规则5.程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的

作用域不同而不会发生语法错误,但会使人误解。

规则6.变量的名字应当使用“名词”或者“形容词+名词” 。

例如:

float value;

float oldValue;

float newValue;

规则7.全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组) 。

类的成员函数应当只使用“动词” ,被省略掉的名词就是对象本身。

例如:

DrawBox(); // 全局函数

box->Draw(); // 类的成员函数

规则8.用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

例如:

int minValue;

int maxValue;

int SetValue(…);

int GetValue(…);

建议:尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的

确需要编号。

2.简单的 Windows 应用程序命名规则

规则1.类名和函数名用大写字母开头的单词组合而成。

规则2.变量和参数用小写字母开头的单词组合而成。

规则3.常量全用大写的字母,用下划线分割单词。

规则4.静态变量加前缀 s_(表示 static) 。

规则5.如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global) 。

规则6.类的数据成员加前缀m_(表示 member) ,这样可以避免数据成员与

成员函数的参数同名。

规则7.为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为

各种标识符加上能反映软件性质的前缀。

第 4 章 表达式和基本语句

1.运算符的优先级

规则:如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免

使用默认的优先级。

2.复合表达式

规则1.不要编写太复杂的复合表达式。

规则2.不要有多用途的复合表达式。

规则3.不要把程序中的复合表达式与“真正的数学表达式”混淆。

3. for 语句的循环控制变量

规则1.不可在for 循环体内修改循环变量,防止for 循环失去控制。

规则2.建议 for 语句的循环控制变量的取值采用“半开半闭区间”写法。

4.循环语句的效率

建议1.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的

循环放在最外层,以减少 CPU 跨切循环层的次数。

建议2.如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。

5. switch 语句

规则1.每个 case 语句的结尾不要忘了加 break,否则将导致多个分支重叠

(除非有意使多个分支重叠) 。

规则2. 不要忘记最后那个default 分支。 即使程序真的不需要 default 处理,

也应该保留语句 default : break; 这样做并非多此一举,而是为了防止别人误以

为你忘了 default 处理。

第 5 章 常量

1.为什么需要常量

规则:尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或

字符串。

2 const 与 #define 的比较

规则:在 C++ 程序中只使用const 常量而不使用宏常量,即 const 常量完

全取代宏常量。

3.常量定义规则

规则1.需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义

文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。

规则2.如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不

应给出一些孤立的值。

第 6 章 函数设计

1.参数的规则

规则1.参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。

如果函数没有参数,则用 void 填充。

规则2. 参数命名要恰当,顺序要合理

规则3.如果参数是指针,且仅作输入用,则应在类型前加 const,以防止该

指针在函数体内被意外修改。

规则4.如果输入参数以值传递的方式传递对象,则宜改用“const &”方式

来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。

建议1.避免函数有太多的参数,参数个数尽量控制在 5 个以内。如果参数太

多,在使用时容易将参数类型或顺序搞错。

建议2.尽量不要使用类型和数目不确定的参数。

2.返回值的规则

规则1.不要省略返回值的类型。

规则2.函数名字与返回值类型在语义上不可冲突。

规则3.不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而

错误标志用 return 语句返回。

建议1.有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,

可以附加返回值。

建议2.如果函数的返回值是一个对象,有些场合用“引用传递”替换“值传

递”可以提高效率。而有些场合只能用“值传递”而不能用“引用传递” ,否则会出错。

3. 使用断言

建议1.使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况

之间的区别,后者是必然存在的并且是一定要作出处理的。

建议2.在函数的入口处,使用断言检查参数的有效性(合法性)。

第 7 章 内存管理

1.重载与覆盖 ,成员函数被重载的特征:

(1)相同的范围(在同一个类中) ;

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

2.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类) ;

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: