读《高质量的C/C++编程》(一)

考完研,开始读这本书,受益匪浅,更多的还是在落实到实践中去吧

跟大家分享下,欢迎大家补充

下载地址

第一章 文件结构

头文件表示声明(declaration),定义文件保存实现(implementation)
1.1版权和版本的声明,如下所示:
/*
* Copyright (c) 2001,上海贝尔有限公司网络应用事业部
* All rights reserved.
*
* 文件名称:filename.h
* 文件标识:见配置管理计划书
* 摘 要:简要描述本文件的内容
*
* 当前版本:1.1
* 作 者:输入作者(或修改者)名字
* 完成日期:2001年7月20日
*
* 取代版本:1.0
* 原作者 :输入原作者(或修改者)名字
* 完成日期:2012年1月9日
*/
1.2头文件结构
包含三个部分:
1、版本和版权信息(如1.1)
2、预处理块
为了防止头文件被重复使用,需要用ifndef/define/endif结构进行预处理)
用#include <file.h>引用标准库文件
用#include “file.h”引用非标准库文件

3、函数和类结构声明等
头文件中只存放声明,不存放定义
不提倡使用全局变量,尽量少用extern int value 这类声明
头文件实例:

// 版权和版本声明见示例1-1,此处省略。(文件名为graphics.h)

#ifndef GRAPHICS_H // 防止graphics.h被重复引用
#define GRAPHICS_H
#include <math.h> // 引用标准库的头文件

#include “myheader.h” // 引用非标准库的头文件

void Function1(…); // 全局函数声明

class Box // 类结构声明
{

};
#endif


1.3 定义文件的结构
三部分:
1、版本和版权信息(如1.1)
2、对头文件的引用
3、程序的实现体


1.4头文件的作用
1、调用库函数
2、加强类型安全检查


第二章  程序的版式
2.1空行的使用
2.2代码行 (一行只做一件事)
2.3代码行内的空格
2.4对齐
2.5长行拆分(在低优先级操作符处拆分,操作符放在新行开头位置,适当缩进)
2.6修饰符的位置(*与&应该靠近变量名而不是数据类型)
2.7注释
2.8类的版式


第三章 命名规则
3.1共性规则
直观可读。最好用英文和英文组合
长度适当
与操作系统和开发工作风格一致。Windows采用“大小写”,AddChild。而Unix采用“小写加下划线”add_child的方式。
不要出现仅靠大小写区分的标识符
不出现标识符完全相同的局部变量和全局变量
变量名字使用“名词”或“形容词+名词”。
全局函数的名字用“动词”或“动词+名词”,DrawBox();类的成员函数只使用“动词”,box->Draw()。
用反义词组命名具有互斥意义的变量或相反动作的函数。
避免名字中出现数字编号。
3.2Windows应用程序命名规则
类名和函数名用大写字母开头的单词组合而成
变量和参数用小写字母开头
常量全用大写,用下划线分割
静态变量加前缀"s_"
全局变量加前缀“g_”
类的数据成员加前缀"m_"




第四章 表达式和基本语句
4.1 运算符优先级问题
4.2 复合表达式
4.3 if语句
1、不可将bool型变量直接与TRUE/FALSE/1/0进行比较
if (flag)  //flag为真

if (!flag) //flag为假

2、整型变量与零值进行比较用"=="或"!=";
3、浮点变量不可用"=="与"!="进行比较。
4、指针变量与零值进行比较,
if(p == NULL) 或 if(p != NULL)
5、可以使用 if (NULL == p)以便于防止出错
4.4 循环语句的效率
1、尽可能将循环长的放内层,循环短的放外层
2、将逻辑判断放在循环体外面,减少判断次数
4.5for循环控制变量
最好不在内部改变循环控制变量
半开半闭区间
4.6 switch语句
不要忘了break;
不要忘了default分支。default : break;
4.7 goto语句
慎用。如多层循环的跳出等。

第五章 常量
5.2 const 与#define的比较
const常量有数据类型,宏常量没有
在C++中用const常量,在C中用宏常量
5.3 常量定义规则
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。
5.4 类中的常量



第六章 函数设计
6.1 参数的规则
1、参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充。
2、参数命名要合适,顺序要合理
3、若参数为指针,且仅作输入用,则在类型前加const,以防止被意外修改
4、避免太多参数,避免类型和树木不确定的参数
6.2 返回值规则
1、类型不能省略
2、函数名字与返回值类型不可在语义上冲突
getchar()的返回值为int型。
3、不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。
4、有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。
strcpy(char *strDest, const char *strSrc)在完成复制功能的同时会返回strDest。
6.3 函数内部实现的规则
1、在函数的“入口处”对参数的有效性进行检查。
正确使用“断言”(assert)来防止由非法参数引起的错误。
2、在函数的“出口处”对return语句的正确性和效率进行检查。
1、return不可返回指向“栈内存”的“指针”或“引用”,因为该内存在函数体结束时被自动销毁。
2、要搞清楚返回的是值、指针还是引用。
3、如果返回的是一个对象,要考虑return的效率。

6.4 其它
1、函数功能要单一。
2、函数体规模要小。50 lines。
3、尽量避免函数带有“记忆”功能,尽量少用static局部变量。
4、不仅要检查输入函数参数的有效性,还要检查通过其它途径进入函数体内的变量的有效性,如全局变量或文件句柄等。
6.5断言
1、程序分为debug版本(内部调试)和Release版本(发行)。
2、assert仅在Debug版本起作用的宏,用于检查“不应该”发生的事。
3、使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
4、函数的入口处,使用断言检查参数的有效性(合法性)。
5、】在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。
6、一般教科书都鼓励程序员们进行防错设计,但要记住这种编程风格可能会隐瞒错误。当进行防错设计时,如果“不可能发生”的事情的确发生了,则要使用断言进行 报警。

6.6 引用与指针的比较


自己写的代码实在太烂了

受教了

继续啃书






















目 录 前 言6 第1 章 文件结构 1.1 版权和版本的声明. 1.2 头文件的结构. 1.3 定义文件的结构. 1.4 头文件的作用. 1.5 目录结构. 第2 章 程序的版式 2.1 空行. 2.2 代码行. 2.3 代码行内的空格. 2.4 对齐. 2.5 长行拆分. 2.6 修饰符的位置. 2.7 注释. 2.8 类的版式. 第3 章 命名规则 3.1 共性规则. 3.2 简单的WINDOWS 应用程序命名规则. 3.3 简单的UNIX 应用程序命名规则 第4 章 表达式和基本语句 4.1 运算符的优先级. 4.2 复合表达式. 4.3 IF 语句 4.4 循环语句的效率. 4.5 FOR 语句的循环控制变量. 4.6 SWITCH 语句. 4.7 GOTO 语句. 第5 章 常量 5.1 为什么需要常量. 5.2 CONST 与 #DEFINE 的比较. 5.3 常量定义规则. 5.4 类中的常量. 第6 章 函数设计 高质量C++/C 编程指南,v 1.0 2001 Page 4 of 101 6.1 参数的规则. 6.2 返回值的规则. 6.3 函数内部实现的规则. 6.4 其它建议. 6.5 使用断言. 6.6 引用与指针的比较. 第7 章 内存管理 7.1 内存分配方式 7.2 常见的内存错误及其对策 7.3 指针与数组的对比 7.4 指针参数是如何传递内存的? 7.5 FREE 和DELETE 把指针怎么啦? 7.6 动态内存会被自动释放吗?. 7.7 杜绝“野指针”. 7.8 有了MALLOC/FREE 为什么还要NEW/DELETE ?. 7.9 内存耗尽怎么办?. 7.10 MALLOC/FREE 的使用要点 7.11 NEW/DELETE 的使用要点. 7.12 一些心得体会 第8 章 C++函数的高级特性 8.1 函数重载的概念. 8.2 成员函数的重载、覆盖与隐藏. 8.3 参数的缺省值. 8.4 运算符重载. 8.5 函数内联. 8.6 一些心得体会. 第9 章 类的构造函数、析构函数与赋值函数 9.1 构造函数与析构函数的起源. 9.2 构造函数的初始化表. 9.3 构造和析构的次序. 9.4 示例:类STRING 的构造函数与析构函数 9.5 不要轻视拷贝构造函数与赋值函数. 9.6 示例:类STRING 的拷贝构造函数与赋值函数 9.7 偷懒的办法处理拷贝构造函数与赋值函数. 9.8 如何在派生类中实现类的基本函数. 9.9 一些心得体会. 第10 章 类的继承与组合. 高质量C++/C 编程指南,v 1.0 2001 Page 5 of 101 10.1 继承 10.2 组合 第11 章 其它编程经验. 11.1 使用CONST 提高函数的健壮性 11.2 提高程序的效率 11.3 一些有益的建议 参考文献 附录A :C++/C 代码审查表. 附录B :C++/C 试题. 附录C :C++/C 试题的答案与评分标准.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值