高质量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)没有精确地封闭文件吗?

 

 



版权声明: 原创作品,许诺转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将清查规则责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1974595.html