高质量C /C编程指南---附录A :C /C代码查抄表

附录A :C /C代码查抄表

文件布局

首要性

查抄项

结论

 

头文件和定义文件的称号能否合理?

 

 

头文件和定义文件的目录布局能否合理?

 

 

版权和版本声明能否残缺?

 

首要

头文件能否运用了 ifndef/define/endif 预措置块?

 

 

头文件中能否只存放“声明”而不存放“定义”

 

 

……

 

挨次的版式

首要性

查抄项

结论

 

空行能否得体?

 

 

代码行内的空格能否得体?

 

 

长行拆分能否得体?

 

 

“{” 和 “}” 能否各占一行并且对齐于同等列?

 

首要

一行代码能否只做一件事?如只定义一个变量,只写一条语句。

 

首要

If、for、while、do等语句自占一行,不管实行语句多少都要加“{}”。

 

首要

在定义变量(或参数)时,能否将修饰符 * 和 & 紧靠变量名?

 

 

注释能否明白理会并且须要?

 

首要

注释能否有错误年夜约可以招致误解?

 

首要

类布局的public, protected, private递次能否在全部的挨次中坚持不合?

 

 

……

 

定名规定例矩

首要性

查抄项

结论

首要

定名规定例矩能否与所采用的利用零碎或开发工具的气势派头坚持不合?

 

 

标识符能否直不雅且可以拼读?

 

 

标识符的长度理应契合“min-length && max-information”准绳?

 

首要

挨次中能否呈现相反的局部变量和全部变量?

 

 

类名、函数名、变量和参数、常量的书写花式能否遵循必定的规定例矩?

 

 

静态变量、全局变量、类的成员变量能否加前缀?

 

 

……

 

表达式与基础语句

首要性

查抄项

结论

首要

倘使代码行中的运算符对照多,能否已经用括号明白理会地确定表达式的利用递次?

 

 

能否编写太复杂年夜约多用处的复合表达式?

 

首要

能否将复合表达式与“真正的数学表达式”混合?

 

首要

能否用隐含错误的举措写if语句? 比方

(1)将布尔变量直接与TRUE、FALSE年夜约1、0举办对照。

(2)将浮点变量用“==”或“!=”与任何数字对照。

(3)将指针变量用“==”或“!=”与NULL对照。

 

 

倘使循环体内存在逻辑鉴定,并且循环次数很年夜,能否已经将逻辑鉴定移到循环体的轮廓?

 

首要

Case语句的收尾能否忘了加break?

 

首要

能否忘失写switch的default分支?

 

首要

运用goto 语句时能否留下隐患? 比方跳过了某些工具的布局、变量的初始化、首要的计算等。

 

 

……

 

常量

首要性

查抄项

结论

 

能否运用含义直不雅的常量来表示那些将在挨次中多次呈现的数字或字符串?

 

 

在C 挨次中,能否用const常量庖代宏常量?

 

首要

倘使某一常量与其它常量紧密亲昵关系,能否在定义中包括了这种关连?

 

 

能否误解了类中的const数据成员?因为const数据成员只在某个工具糊口生存期内是常量,而关于整个类而言却是可变的。

 

 

……

 

函数方案

首要性

查抄项

结论

 

参数的书写能否残缺?不要贪图省事只写参数的类型而省略参数名字。

 

 

参数定名、递次能否合理?

 

 

参数的个数能否太多?

 

 

能否运用类型和数目不确定的参数?

 

 

能否省略了函数前去值的类型?

 

 

函数名字与前去值类型在语义上能否辩说?

 

首要

能否将正常值和错误标记混在一路前去?正常值理运用输入参数获得,而错误标记用return语句前去。

 

首要

在函数体的“进口处”,能否用assert对参数的无效性举办反省?

 

首要

运用滥用了assert? 比方混合合法环境与错误环境,后者是必然存在的并且是必定要作出措置的。

 

首要

return语句能否前去指向“栈内存”的“指针”年夜约“引用”?

 

 

能否运用const提高函数的壮健性?const可以欺压维护函数的参数、前去值,致使函数的定义体。“Use const whenever you need”

 

 

……

 

内存料理

首要性

查抄项

结论

首要

用malloc或new请求内存之后,能否立即反省指针值能否为NULL?(防备运用指针值为NULL的内存)

 

首要

能否忘失为数组和静态内存赋初值?(防备将未被初始化的内存作为右值运用)

 

首要

数组或指针的下标能否越界?

 

首要

静态内存的请求与释放能否配对?(防备内存泄露)

 

首要

能否无效地措置了“内存耗尽”功能?

 

首要

能否修改“指向常量的指针”的内容?

 

首要

能否呈现野指针?比方

(1)指针变量没有被初始化。

(2)用free或delete释放了内存之后,忘失将指针设置为NULL。

 

首要

能否将malloc/free 和 new/delete 混合运用?

 

首要

malloc语句能否精确无误?比方字节数能否精确?类型转换能否精确?

 

首要

在建树与释放静态工具数组时,new/delete的语句能否精确无误?

 

 

……

 

C 函数的低级特征

首要性

查抄项

结论

 

重载函数能否有二义性?

 

首要

能否混合了成员函数的重载、覆盖与荫蔽?

 

 

运算符的重载能否契合制订的编程规范?

 

 

能否滥用内联函数?比方函数体内的代码对照长,函数体内呈现循环。

 

首要

能否用内联函数庖代了宏代码?

 

 

……

 

类的布局函数、析构函数和赋值函数

首要性

查抄项

结论

首要

能否违背编程规范而让C 编译器主动为类孕育爆发四个缺省的函数:(1)缺省的无参数布局函数;(2)缺省的拷贝布局函数;(3)缺省的析构函数;(4)缺省的赋值函数。

 

首要

布局函数中能否脱漏了某些初始化事故?

 

首要

能否精确地运用布局函数的初始化表?

 

首要

析构函数中能否脱漏了某些排除事故?

 

 

能否错写、错用了拷贝布局函数和赋值函数?

 

首要

赋值函数伟年夜分四个步调:(1)反省自赋值;(2)释放原有内存资本;(3)分派新的内存资本,并复制内容;(4)前去 *this。能否脱漏了首要步调?

 

首要

能否精确地编写了派生类的布局函数、析构函数、赋值函数?具体事故:

(1)派生类不可以担当基类的布局函数、析构函数、赋值函数。

(2)派生类的布局函数应在其初始化内外调用基类的布局函数。

(3)基类与派生类的析构函数应该为虚(即加virtual环节字)。

(4)在编写派生类的赋值函数时,具体不要忘失对基类的数据成员从头赋值。

 

 

……

 

类的低级特征

首要性

查抄项

结论

首要

能否违背了担当和组合的规定例矩?

(1)若在逻辑上B是A的“一种”,并且A的全部结果和属性对B而言都有意义,则应允B担当A的结果和属性。

(2)若在逻辑上A是B的“一局部”(a part of),则不应允B从A派生,而是要用A和其它器材组合出B。

 

 

……

 

其它稀有功能

首要性

查抄项

结论

首要

数据类型功能:

(1)变量的数据类型有错误吗?

(2)存在分歧数据类型的赋值吗?

(3)存在分歧数据类型的对照吗?

 

首要

变量值功能:

(1)变量的初始化或缺省值有错误吗?

(2)变量孕育爆发上溢或下溢吗?

(3)变量的精度够吗?

 

首要

逻辑鉴定功能:

(1)因为精度缘由招致对照无效吗?

(2)表达式中的优先级有误吗?

(3)逻辑鉴定结果颠倒吗?

 

首要

循环功能:

(1)循环截至前提不精确吗?

(2)无法正常截至(逝世循环)吗?

(3)错误地修改循环变量吗?

(4)存在偏差累积吗?

 

首要

错误措置功能:

(1)忘失举办错误措置吗?

(2)错误措置挨次块不休没无时机被运转?

(3)错误措置挨次块本身就有缺点吗?如呈报的错误与理论错误不不合,措置举措不精确等等。

(4)错误措置挨次块是“马后炮”吗?如在被它被调用之前软件已经蜕化。

 

首要

文件I/O功能:

(1)对不存在的年夜约错误的文件举办利用吗?

(2)文件以不精确的举措掀开吗?

(3)文件竣事鉴定不精确吗?

(4)没有精确地关闭文件吗?

 

 



版权声明: 原创作品,应允转载,转载时请务必以超链接情势标明文章 原始来因 、作者信息和本声明。否则将穷究法则责任。

posted @ 2011-03-07 17:00  蓝色的天空III  阅读(152)  评论(0编辑  收藏  举报