1、C 代码审查表(条款解释) 一、 文档说明 此文件为广州高科通信设备有限公司 C 代码检查表 (修订 )的条款解释文件,用于在QC 代码检查中配合 C 代码检查表使用。如果此文件与其它相关文件发生冲突或是其它未尽事宜,以公司文件 GK-RU038 软件设计 C.C+编码暂行规定为准。 二、 C 代码审查表条款解释 1、 文件结构 1.1 头文件和定义文件的名称是否合理? ( 1)符合基本的命名规则,用相应的英文进行命名,不应该出现仅靠大小写区分的相似的文件名; ( 2)当某一头文件仅被一个定义文件引用时,比如某些驱动程序,两文件名应该有 明确的关联性,例如“ drv_21Q50.c“和” dr
2、v_21Q50.h“。 1.2 头文件和定义文件的目录结构是否合理? ( 1) 当一个软件的头文件数目比较多,应将头文件和定义文件分别保存于不同的目录,以便于维护。如可将头文件保存于 include 目录,将定义文件保存于 source 目录。 ( 2) 如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。 1.3 版权和版本声明是否完整?是否符合标准规定? 版权和版本的声 明位于头文件和定义文件的开头,主要内容有: ( 1)版权信息。 ( 2)文件名称,标识符,摘要。 ( 3)当前版本号,作者 /修改
3、者,完成日期。 ( 4)版本历史信息。 例如: /* * memory.c - xdr routine for coding/decoding WDB memory structures * Copyright 1998-2002 GuangZhou GaoKe Communication Co.Ltd. * modification history *- * 01e,30jan96,elp added windll.h, changed xdr_TGT_ADDR_T in macro. * 01d,10jun95,pad Included rpc/rpc.h * 01a,03oct94,tp
4、r written. *- */ 格式详见公司 GK-RU038 软件设计 C.C+编码暂行规定 .doc。 1.4 头文件是否使用了 ifndef/define/endif 预处理块 ? 在某个文件中引用同一个个头文件两次获更多次,将会造成重复定义之类的变异错误。应该使用#ifndef/#define/#endif 预处理块防范被多次引用。建议此类宏名应该与文件名一致,而且使用大写,“ .h”用“ _H”代替,例如在一个 graphics.h 头文件中防止重复引用: #ifndef GRAPHICS_H /* 防止 graphics.h 被重复引用 */ #define GRAPHICS_H
5、 #include /* 引用标准库的头文件 */ #include “myheader.h” /* 引用非标准库的头文件 */ void Function1(); /* 全局函数声明 */ #endif 1.5 头文件中是否只存放“声明”而不存放“定义”? 头文件是用来声名而不是定义的。如果在头文件中定义变量或常量,会使得所有引用其的定义文件都产生这样的变量或常量。 2、 程序的版式 2.1 空行是否得体? ( 1)在每个类声明之后、 每个函数定义结束之后都要加空行。 ( 2)在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。 ( 3)建议函数体间的空行为 2 3 行,
6、逻辑块间空一行。 2.2 缩进是否遵守 4 个空格的规定?变量定义是否缩进? 缩进使含有嵌套的代码在逻辑上更加清晰。应该直接使用空格进行缩进,或定义制表符等于 4 个空格,消除在不同的编辑器下代码格式的混乱。 2.3 代码行内的空格是否得体? 所谓空格得体,是指: ( 1)关键字之后要留空格,以突出关键字。例如 switch (nBoard), while (condition)。 ( 2),、;向前紧跟,之后要留空格,如 Function(x, y, z)。如果;不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)。 ( 3)赋
7、值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ =”、“ +=” “ =”、“ ”这类操作符前后不加空格。例如 asWanConf10.abIPLocal0 = 0x8a; 2.4 长行拆分是否得体? ( 1)代码行最大长度宜控制在 70 至 80 个字符以内。 标准显示器 /输出设备(字符终端,缺省宽度的显示窗口)的宽度都大于等于 80 个字符,控制代码行的最大长度可以保证代码在显示,编辑,打印等情况下都不会发生因为宽度不够而折行的现象。 ( 2)长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
8、例如 if (very_longer_variable1 = very_longer_variable12) /* 放在一行 */ /* 结构、联合、枚举的例外 */ thpedef strcut Message; /* 放在一行 */ 2.6 “” 和 “” 对齐是否和所使用的开发工具一致? 在第三方代码的基础上修改,其对齐方式应该与第三方代码保持一致。否则采用公司标准。 2.7 “(”“)”前后的水平空格是否符合规范? ( 1)函数名之后不要留空格,紧跟左括号(;而关键字后留空格再跟左括号(。 例如,将不良书写风格 void Func1 (int x,int y,int z); for(i=0;i=value-EPSINON) iN; i+) if (condition) DoSomething(); else DoOtherthing(); 改为 if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing(); 4.7 Case 语句的结尾是否忘了加 break?