C++CdereviewCheckList

上传人:油条 文档编号:1505187 上传时间:2017-06-23 格式:XLS 页数:54 大小:121.50KB
返回 下载 相关 举报
C++CdereviewCheckList_第1页
第1页 / 共54页
C++CdereviewCheckList_第2页
第2页 / 共54页
C++CdereviewCheckList_第3页
第3页 / 共54页
C++CdereviewCheckList_第4页
第4页 / 共54页
C++CdereviewCheckList_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《C++CdereviewCheckList》由会员分享,可在线阅读,更多相关《C++CdereviewCheckList(54页珍藏版)》请在金锄头文库上搜索。

1、日期: 年 月 日重要程度11.11.21.31.41.51.61.71.81.922.12.22.32.42.52.62.72.82.92.102.112.122.132.142.152.162.172.182.1933.13.23.33.43.53.73.83.93.93.1044.14.24.34.45 函数5.15.25.35.45.5函数的含 义标识 中第一个字母是否大写关键 代 码 是否有注 释是否添加了函数 头 来描述函数注 释 是否清晰,完整长 行拆分得体编码检查表问题空行得体代 码 行内的空格得体文档或模块名称:程序版式命名规则与注释表达式与基本语句常量两个以上的if判断最好

2、要用switch常量命名要能 够 明确表示出它的用途判断,循 环 不能嵌套超 过 5层参数命名恰当, 顺 序合理复杂对 象 类 型 类 型的 传递 用引用,并用const修 饰参数的 书 写完整,一致指 针类 型的入参必 须 有const修 饰switch 语 句的分支 结 构逻辑 判断 语 句正确不使用goto 语 句枚 举 名是否加前 缀 EN_ , 枚 举 名中所有字母是否大写, 单词间 是否用_相隔枚 举 的成 员变 量中是否所有字母都大写, 单词间 是否用_相隔修改代 码 后,是否 记录 了修改履 历 。是否有文件 头 部信息对 于由几个 单词组 合表达的函数的含 义标识 ,每 个

3、单词 第一个字母是否大写。变 量命名格式是否 为 :变 量名= + + 变 量是否命名 为 有意 义单词 或 单词组 合“” 和 “” 各占一行并且 对齐 于同一列一行代 码 只做一件事在使用“if”“else” 语 句 时 要使用“”和“”明确 关 系Tab设 置 为 “Insert spaces”类结 构的public, protected, private 顺 序在所有的程序保持一致头 文件使用了 ifndef/define/endif 预处 理 块 或#pragma once循 环语 句的效率for 语 句的循 环 控制 变 量类 中第一个字母是否符合 规范,例如为 大写C等联合体命名

4、是否符合规范,例如为 UN_ + 含义标识等联 合体含 义标识 中是否所有字母大写,并用_相隔结构体命名是否符合规范,例如用tag标识结 构体含 义标识 中是否所有字母大写,并用_相隔宏定 义 是否所有字母大写, 单词间 是否用_相隔。宏定 义 内的 变 量,是否用()括起来常量中是否所有的字母大写, 单词间 是否用_相隔如果代 码 行中的运算符比 较 多,用括号清楚地确定表达式的操作 顺 序不 编 写太 复杂 或者多用途的 复 合表达式不将 复 合表达式与“真正的数学表达式”混淆不能有硬 编码 ,用常量替 换 之const 常量取代宏常量如果某一常量与其它常量密切相 关 ,是否在定 义 中包

5、含了 这种关 系不要省略返回 值 的 类 型5.65.75.85.95.105.115.125.135.145.155.165.1766.16.26.36.46.56.66.76.877.17.27.37.47.57.67.77.87.988.18.28.38.48.58.68.78.88.98.108.118.128.138.148.1599.19.29.39.49.59.69.7内存/资源管理使用T2BSTR宏是 确 保返回的 对 象通 过 SysFreeString释 放确保在无限循 环 (直到程序退出才 离开 的循 环 )适 当的使用A2W等 转换 宏使用SHGetSpecialFol

6、derLocation函数 获 得的LPITEMIDLIST 指 针 需要通 过 IMalloc-Free方法 释 放是否使用 资 源初始化(构造函数中 获 取 资 源,析构函数中 释 放 资 源)函数中可能存在多个return, 检查 在 每 个return之前, 资 源是否 释 放。资 源 释 放后,是否将句柄或指 针赋为 无效句柄或NULL是否考 虑 了异常 发 生 时资 源的 释 放(包括指 针 、句柄、数据 库连 接等等)在 复 制构造函数中是否 对 需要分配内存的 变 量 进 行了内存 释 放和再分配操作程序中申 请 内存 时 ,要 检查 内存分配是否成功当判断出函数中有相似功能

7、时 ,要用函数重 载 的方法来 进 行分解对 于要兼容多个操作系 统 的程序,在参数 类 型的 设计 上一定要考 虑 到兼容性 问题类 的命名是否具有代表性类 的 继 承 关 系是否正确,完整需要 关闭 的句柄是否 关闭多 线 程 时 有没有考 虑 数据同 步 和代 码 重入的 问题 ,和 锁对 象的利用函数命名是否能正确表示出它所 实现 的功能。确定 每 个流程分支的 逻辑 判断都符合 实际 功能的 设 定避免函数有太多的参数,参数个数尽量控制在5个以内C+程序中尽量不要使用 类 型和数目不确定的参数函数体的 规 模要小,尽量控制在50 行代 码 之内函数的功能要 单 一,不要 设计 多用途

8、的函数在函数体的“入口 处 ”,对 参数的有效性 进 行 检查return 语 句是否返回指向“ 栈 内存”的“指 针 ”或者“引用”是否存在接口指 针 泄漏程序中用申 请 的内存使用后是否 释 放使用COM的 线 程 结 束 时 是否 调 用了CoUninitialize 进 行清理工作是否打 开 的文件都及 时关闭 了是否判断了CreateFile的返回 值为 INVALID_HANDLE_VALUE,而不是NULL创 建的Window 对 象是否被正确 销毁 。如DC , Font , Brush等判断使用COM的 线 程是否初始化COM使用VariantChangeType函数后需要使

9、用VariantClear函数 释 放是否捕 获 了所有的异常COM相关禁止在套 间间传递 接口指 针使用完接口指 针 后,是否Release调 用COM方法后,是否判断返回 值使用断言捕捉不 应该发 生的非法情况在函数的入口 处 ,使用断言 检查 参数的有效性(合法性)。不要 让 C+ 编译 器自 动为类产 生四个缺省的函数, 应该显 示定 义是否正确地使用构造函数的初始化表赋值 函数函数是否 书 写正确基 类 与派生 类 的析构函数 应该为 虚(即加virtual 关键 字)在 编 写派生 类 的 赋值 函数 时 ,注意不要忘 记对 基 类 的数据成 员 重新 赋值设计 中正确使用 继 承

10、和 组 合断言和异常处理是否添加必要的异常 处 理在捕 获 异常 时 ,异常捕 获 的是否完全。是否混用了SEH和cpp异常 处 理不能抛空异常异常 发 生 时 数据 处 理有没有回 滚 操作和事 务处 理异常 处 理代 码 是否有相 关 的 记录 日志的代 码是否所有的流程分支都有return函数名字与返回 值类 型在 语义 上不可冲突类的构造函数、析构函数和赋值函数9.89.91010.110.210.310.410.510.610.710.810.910.1010.1110.131111.111.211.311.4结果(评审 ) 是: 0 否 : 0 不适用 : 0结果(预防 ) 是:

11、0 否 : 0 不适用 : 0使用安全的字符串 处 理函数字符串的操作中注意0 结 束符,注意 缓 冲区的溢出 问题说明字符 类 型 应该 使用TCHAR,和字符串相 关 的函数 应 使用TCHAR 风 格的使用指 针 前是否 检查 了指 针 的有效性对 函数是否 调 用成功的 检查 ,对 函数 调 用不成功 时 的 处 理。( 对 所有的函数需要判断返回 值 )尽量避免构造无用的 临时对 象循 环检查文件I/O 检查安全内存 复 制是否 检查 目 标缓 冲区的大小和待 复 制的 缓 冲区大小一致VS2005中使用安全的字符串 处 理函数对 于字符串的操作, 计 算 缓 冲区 时 是否考 虑

12、到0 结 束符是否存在内存泄漏接口 释 放后,是否将接口指 针赋为 NULL数据 类 型和 变 量 检查逻辑 判断 检查常量和宏定 义 到 统 一的 头 文件中。是否有重 复 的code,有没有函数化其他对 于字符串追加操作,是否判断目的 缓 冲区的大小和目的 缓 冲区已使用的大小加上待 复 制的 缓 冲区大小一致选择检测项目 评价结果 NG项数目编码检查表文档或模块名称:说明CL 序号 Check 项目 说明=2000)函数名之后不要留空格,紧跟左括号(void Func1 (int x, int y, int z);,之后要留空格,如果;不是一行的结束符号,其后要留空格void Func1

13、(int x,int y,int z);for (i=1;i=”“+”,“%”、“&”,“=2000)代码行最大长度宜控制在80 个字符以 略长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐略略一行代码只做一件事情,如只定义一个变量,或只写一条语句int a, b, c;if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加。if (width 1)if(b1)else- -程序的版式检查项目说明好的/正确的情况略略if (year = 2000)void Func1(int x, i

14、nt y, int z);void Func1(int x, int y, int z);for (i=1; i= 2000)略if (very_longer_variable1 =very_longer_variable12)& (very_longer_variable3 1)if(b1)else程序的版式检查项目说明CL 序号 Check 项目 说明+ + scope 有 g,m , l , s 四种。prefix必须按照匈牙利命名法 。临时变量14 变量是否命名为有意义单词或单词组合15 关键代码是否有注释16 是否添加了函数头来描述函数17 注释是否清晰,完整18 是否有文件头部信息

15、19 修改代码后,是否记录了修改履历。命名规则项目说明子项目 不好的/错误的情况命名规则项目说明好的/正确的情况命名规则项目说明CL 序号 Check 项目 说明= b & c =-EPSINON) & (aFree方法释放15 使用VariantChangeType函数后需要使用VariantClear函数释放内存、资源管理检查项目说明程序中用申请的内存使用后是否释放7子项目 不好的/错误的情况malloc分配的内存要用free释放new分配的内存要使用delete释放new分配的数组要使用delete释放其他分配其分配的内存要用相应的释放方法释放char cString = NULL ;new cString char10 ;strcpy( cString , sz ) ;内存、资源管理检查项目说明好的/正确的情况char cString = NULL ;new cString char10 ;if( NULL = cString ) /检测内存是否分配成功cout =sizeof(sUserName)-1) break; 这里比较容易忘掉sUserNamei+ = *username+;sUserNamei = 0;1、应用程序字符串是固定字符串2、能证明没有从外部操作(文件中,注册表中)获得应用程序字符串除此以外需要通过其他方式判断应用程序的合法性其它检查项目说明

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号