软件代码评审检查点--C-C++精选.docVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件代码评审检查点--C-C精选

软件代码评审检查点--C-C++ 文件结构审查 【检查点1 】文件名是否和实际内容相符?[规范性] 〖说明〗文件名应该清晰说明出该文件的功能和作用。 〖案例〗略 【检查点2 】多个模块公用的定义和函数原型的说明是否放在“*.h”? 〖说明〗一般来说,*.h文件是公用的头文件,文件中申明的宏、结构、函数原型等,一其他的模块需要引用。 〖案例〗略 【检查点3 】私有的申明和函数原型的说明是否放在“*.inc”? 〖说明〗一般来说,*.inc文件是私有的头文件。文件中申明的宏、结构、函数原型等,是仅供本模块使用。 〖案例〗略 【检查点4 】头文件是否使用了#ifndef#endif宏开关来防止重复引用? 〖说明〗一般来说,头文件通过如下方法避免重复引用: #ifndef _XXX_H_ #define _XXX_H_ /*文件主体*/ #endif 【检查点5 】函数原型是否没有明确申明返回值类型 〖说明〗虽然C语言并不需要精确定义和声明函数返回类型,如果函数没有返回值,则定义为类型void。如果函数没有定义返回类型,编译器将认为其返回类型为int。在这种情况,很难判断函数是否应该有返回值。为了避免这种情况,函数返回类型应该被定义和声明。 〖案例〗错误书写: SSfunction() ; 正确书写: void SSfunction() ; 预处理 【检查点1 】宏定义是否缺少了“( )”符号? 〖说明〗对于表达式的宏定义,注意要对变量和表达式本身使用“( )”,防止宏展开时出错。 〖案例〗案例一 注意下面的宏定义极易出现问题: #define ADD(x, y) x + y 上面的宏在如下代码中出错: c = ADD(a, b) /2; 宏展开后的形式为: c = a + b /2; 而不是: c = (a + b) /2; 案例二 #define MULTI(x, y) x*y 在程序中代码如下: a = MULTI( b+c, 2); 宏展开后为: a = b + c * 2 ; 而不是: a = (b + c) * 2; 【检查点2 】宏不期望或者意料之外的附加效应宏是一个短行的文本,或者说文本模板,它可以被扩充为更长的文本.通常由宏产生的问题并不在宏定义本身,而往往由其下面的程序引起. 采用宏可以使代码简化,但它也可能隐藏重要的细节和关键的操作. #define SQUARE ( x ) ( ( x ) * ( x ) ) . . . w = SQUARE ( ++ value ); 实际对宏SQUARE的引用将导致value被增加两次 , 因为这个语句将被C预处理器扩充以下形式: w = ( ( + + value ) * ( + + value ) );通过定义宏来改变程序控制流程通过定义宏来改变程序控制流程实际上是很糟糕的编程技巧错误形式: #define FOR_ALL for ( i = 0; i size ; i ++ ) . . . /* Clear the C array */ FOR_ALL { c [ i ] = 0; } 【检查点4 】在函数定义中使用条件预处理标志所致使的代码差别在函数定义中使用条件预处理只能用于程序中基于所定义的标志所致使的代码的轻微差别.大的差别应该由不同的函数来处理.函数内部的条件预处理遍及整个函数在函数定义中使用条件预处理只能用于程序中基于所定义的标志所致使的代码的轻微差别.大的差别应该由不同的函数来处理.一个条件预处理使一个完整的 C 语句分为几段不应该让一个条件预处理使一个完整的 C 语句分为几段. 错误形式: if ( ( cond = = GLRUN ) #ifdef FEAT_A | | ( cond = = GLWAIT ) #endif ) { 正确形式:#ifdef FEAT_A if ( cond = = GLRUN | | cond = = GLWAIT ) #else if ( cond = = GLRUN )

文档评论(0)

tazhiq2 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档