计算机源代码编程规范-B0
- 格式:doc
- 大小:398.50 KB
- 文档页数:47
计算机源代码编写规范
GEO-QT-00-733
修改章节
修改内容
版本号
编写/修改
审阅
批准
所有
新发布
B0
王琳
王密
朱欣焰
B0版审批记录:
1.目的
良好的编程风格是提高程序可靠性非常重要的手段,也是大型项目多人合作开发的技术基础。编程风格统一与否直接影响着软件的可维护性、可读性的好坏,以及日后培训和交流的难易程度,继而对软件开发成本有着直接的关系。因此,源程序的编码风格已经成为软件项目的一个重要组成部分。本规范的目的在于通过规范定义来避免不好的编程风格,增强程序的易读性,便于自己和其它程序员理解。
在命名时应注意:
标识符本身最好能够表明其自身的含义,以便于使用和他人阅读。按其在应用中的含义由一个或多个词组成。可以是英文词或中文拼音词。
当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写,常量标识符全部大写。中文词由中文描述含义的每个汉字的头一个拼音字母组成。英文词尽量不缩写,如果有缩写,应注意缩写规则要一致,并要给每个名字加注释。同时,一个变量只能表示一个意义。
主要算法;
接口说明(包括调用形式,参数描述,子程序清单);
有关数据描述(重要的变量及其用途,约束或限制条件,以及其他有关信息);
模块位置(在哪个源文件中,或隶属于哪个软件包);
开发简历(模块设计者,复审者,复审日期,修改日期及有关说明)等;
维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。
{
statements
}
if (expression ){
statements
}
else{
statements
}
4.2.6.
一个程序的宽度如果超出页宽或屏宽,将是很难读的。所以本规范要求使用折行缩进的方法、合并表达式或编写子程序的方法来限制程序的宽度。
任何一个程序最大行宽不得超过80列,超过者应折行书写。
空行和空白字符也是一种特殊注释。
一目了然的语句不加注释。
注释的作用范围可以为:定义、引用、条件分支以及一段代码。
注释行数(不包括程序头和函数头说明部份)应占总行数的1/5到1/3。
4.5.3.
禁止出现两条等价的支路。
禁止GOTO语句。
用IF语句来强调只执行两组语句中的一组。禁止ELSE GOTO和ELSE。
2.适用范围
本规范适用于公司所有软件的源程序编写。客户有特殊要求时,则优先遵循客户提出的要求。
3.读者对象
本文的阅读对象为项目经理、软件设计工程师、软件测试工程师、软件维护工程师,以期在软件的编码、测试、维护、移交过程中,保持一致的风格,提供一流代码。
4.基本编码风格指导
4.1.标识符命名及书写
4.1.1.
5.4.1.
char (8)
chKeyIn;
unsigned char(8)
uchValue;
UCHAR=unsigned char;
uchValue;
Char *
szText;
PSZ=char *;
szValue;
LPSTR
szSeparator;
LPCSTR
szSQL;
PUCHAR=UCHAR *;
公共控件或类应建立使用模板。
5.VC编码规范
5.1.命名
5.1.1.
变量名采用通常的“匈牙利”表示法,外加作用域限定符。例如:m_nCountValue,其中“m”表示作用域限定符,意为该变量是某个类的数据成员,紧接着的小写n表示变量为整型(int或long或INT或LONG),后面以大写开头的单词词组表示变量的含意。
4.2.注释及格式要求
注释总是加在程序的需要一个概括性说明或不易理解或易理解错的地方。注释应简炼、易懂、准确。所采用的语种建议是中文,如有输入困难、编译环境限制或特殊需求也可采用英文。注释与代码的比例一般要求为1:3。即平均每写三行代码,要加有一行注释。
4.2.1.
在文件的头部必须标明程序名称,它所完成的主要功能;
RETURN。
用CASE实现多路分支。
避免从循环引出多个出口。
函数只有一个出口。
不使用条件赋值语句。
避免不必要的分支。
不要轻易用条件分支去替换逻辑表达式。
4.5.4.
程序首先是正确,其次是优美。
修改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
所有变量在调用前必须被初始化。
对所有的用户输入,必须进行合法性检查。
4.2.3.
应对不易理解的分支条件表达式加注释;
不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);
过长的函数实现,应将其语句按实现的功能分段加以概括性说明;
供别的文件或函数调用的函数,绝不应使用全局变量交换数据。
4.2.4.
在常量名字(或有宏机制的语言中的宏)声明后应对该名字作适当注释,注释说明的要点是:
整型实型浮点型字符型…;
当多个变量用一个语句说明时,要对这些变量按字母顺序排列,如:int, high, length, size, width;如果数据结构比较复杂,如链表,要使用注释来加以解释说明。
4.4.语句结构
一行内只写一条语句。
每个功能函数的代码长度不能过长,通常不能超过150行。
尽量使用库函数。
uszValue;
TCHAR
LPTSTR
LPCTSTR
5.4.2.
(32bits)
INT = int;
nValue;
int
nValue;
long
nValue;
PINT = int *;
pnValue;
LPINT = int *;
pnValue;
LPLONG = long *;
pnValue;
UINT = unsigned int;
LPDWORD = DWORD *;
pdwValue;
(16bits)
不要比较浮点数的相等,如:10.0 * 0.1 == 0。
程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等。
单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。
4.5.5.
可重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。
公共控件或类应减少外界联系,考虑独立性或封装性。
5.1.2.
局部变量不需要加作用域限定符,如pDoc, hDC, hInstance, hPen等等。
5.1.3.
全局变量以“g_”开头,作为作用域限定符。例如,g_bModified, g_ptStartPoint, g_strNoteText,等等。
5.1.4.
类成员变量统一遵守MicroSoft Foundation Classes(MFC)的约定,即所有类的数据成员(或类成员变量)都以m_作为作用域限定符开头。例如,m_bStripTrailingSpaces, m_strConnect, m_listRecordsets等等。
程序编写要首先注重清晰性及正确性,然后是执行效率,不要追求技巧。
尽量使用公共过程或子函数去代替重复的功能代码段。
使用括号来清晰地表达算术表达式和逻辑表达式的运算顺序。
尽量减少使用“否定”条件的条件语句。
程序设计模块化,模块功能单一化。
利用信息隐蔽,确保每一个模块的独立性。
确保变量使用前都进行初始化。
避免运算错误,例如用零做除数。
4.5.代码编写要求
4.5.1.
程序结构清晰,简单易懂,单个函数的程序行数不得超过150行。
代码精简,避免垃圾程序。
尽量使用标准库函数和公共函数。
不要随意定义全局变量,尽量使用局部变量。
使用括号以避免二义性。
4.5.2.
可读性第一,效率第二。
保持注释与代码完全一致。
每个源程序文件,都有文件头说明。
标识的总长度不要超过32个字符。
4.1.2.
源代码文件标识符构成:内容标识.类型标识,这两部分字符应仅使用字母、数字和下划线。标识的长度不能超过32个字符,以便于识别。
内容标识:通常以该文件所表示的内容或作用来命名。一般以英文表示。当由多个词组成时,每个词的第一个字母大写,其余全部小写。
类型标识:表示该文件的类型。具体的编程环境有特殊规定的以编程环境的规定为准。
含义标识:用来标明该标识所对应的被抽象的实体,以便记忆。上面例子中“s_Example”的“Example”就是含义标识。
以C++为例:C++的成员变量开始要冠以m_,全局变量开始要冠以g_,指针开始要冠以p_。如用m_CountTimes表示进行计算的次数,用m_MessageLength表示消息的长度。
5.1.5.
函数变量的定义同局部变量,不加作用域限定符。
5.1.6.
宏全部以大写字母表示。
5.2.枚举定义风格
枚举定义风格遵守Visual C++的APP Studio工作台为枚举定义的风格。
用“GEO”标识是Geostar自定义的枚举。定义风格如下:
typedef enumgeoFIELDTYPE
建议一个函数的缩进不得超过5级,超过者应将其子块写为子函数;
算法或程序本身的特性有特殊要求时,可以超过5级。
4.3.数据说明
数据说明的次序应当规范化,使数据属性容易查找,也有利于测试和维护。基本排列次序如下:
常量说明简单变量类型说明数组说明公共数据块说明所有的文件说明。
简单变量类型说明又可进一步按下面顺序排列:
dwValue;
ULONG = unsigned long;