软件编码规范文件状态:[√] 草稿[ ] 正式发布[ ] 正在修改文件编号:RDC-DED-SCS-SPC-00 当前版本:作者:审核人:完成日期:中国人民银行清算总中心支付系统开发中心版本编号变化状态简要说明日期变更人批准日期批准人注:变化状态:A—增加,M—修改,D—删除目录第一篇C/C++编码规范 (6)第一章代码组织 (6)第二章命名 (9)2.1文件命名 (9)2.2变量命名 (9)2.3常量与宏命名 (10)2.4类命名 (10)2.5函数命名 (10)2.6参数命名 (11)第三章注释 (12)3.1文档化注释 (12)3.2语句块注释 (17)3.3代码维护注释 (20)第四章编码风格 (22)4.1排版风格 (22)4.2头文件 (26)4.3宏定义 (27)4.4变量与常量 (30)4.5条件判断 (32)4.6空间申请与释放 (33)4.7函数编写 (33)4.8类的编写 (37)4.9异常处理 (40)4.10特殊限制 (40)第五章编译 (41)第六章ESQL/C编码 (46)第二篇JAVA编码规范 (47)第一章代码组织 (48)第二章命名 (51)2.1包命名 (51)2.2类命名 (51)2.3接口命名 (51)2.4方法命名 (51)2.5变量命名 (51)2.6类变量命名 (52)2.7常量命名 (52)2.8参数命名 (52)第三章注释 (53)3.1文档化注释 (53)3.2语句块注释 (57)3.3代码维护注释 (59)第四章编码风格 (61)4.1排版风格 (61)4.2包与类引用 (66)4.3变量与常量 (66)4.4类编写 (67)4.5方法编写 (68)4.6异常处理 (71)4.7特殊限制 (71)第五章编译 (73)第六章JSP编码 (74)6.1文件命名及存放位置 (74)6.2内容组织 (74)6.3编码风格 (76)6.4注释 (78)6.5缩进与对齐 (78)6.6表达式 (79)6.7JavaScript (79)第三篇POWERBUILDER编码规范 (80)第一章代码组织 (81)第二章命名 (82)2.1文件命名 (82)2.2对象命名 (82)2.3变量命名 (84)2.4常量命名 (85)2.5函数与事件命名 (85)2.6参数命名 (85)第三章注释 (85)3.1文档化注释 (85)3.2语句块注释 (88)3.3代码维护注释 (88)第四章编码风格 (89)4.1界面风格 (89)4.2排版风格 (93)4.3变量与常量 (95)4.4条件判断 (96)4.5空间申请与释放 (97)4.6函数编写 (97)4.7特殊限制 (97)第五章SQL编码 (98)前言程序编码是一种艺术,既灵活又严谨,充满了创造性与奇思妙想。
然而应用软件设计是一项团结协作工程,而非程序员展示个人艺术的舞台,大型应用软件项目更是由很多程序员组成的大型开发团队协同完成的。
每个程序员都有自己的编码经验与风格,如果缺乏统一的编程规范,则可能导致软件产品最终程序代码风格迥异,可读性与可维护性均较差,不仅给程序代码的理解带来障碍,也增加维护阶段的工作量。
此外,经验证明不规范的编码行为往往还会导致程序出现更多的隐含错误。
为规范编码行为,增强程序代码的可读性、可维护性,提高编码质量与效率,保障应用软件产品整体品质与可持续开发性,特制定本规范。
本规范分C/C++编码规范、Java编码规范、PB 编码规范三篇,分别从代码组织、命名、注释、编码风格、编译等方面加以阐述。
规范文本分为规则与建议两种,其中规则是强制执行的条款,建议则由程序员根据实际情况灵活掌握。
第一篇C/C++编码规范第一章代码组织规则1: 使用不同的文件分别放置模块的约束与实现。
C++程序的约束文件使用.hpp做扩展名,实现文件使用.cpp做扩展名;C程序的约束文件使用.h做扩展名,实现文件使用.c做扩展名。
规则2: 一个模块可以包含一个类或功能上紧密联系的多个类。
禁止将功能关联松散的多个类,放置到一个模块中。
规则3: 模块约束应仅包含模块对外提供的功能,禁止将模块内部使用的功能声明在模块约束中。
下例中IsChineseChar()是内部使用的函数,不提供给外部应用使用,因此不能在例:commpub.hppBOOL IsChineseString(const char* sInStr);例:commpub.cppstatic BOOL IsChineseChar(const char* s){……;}BOOL IsChineseString(const char* sInStr){for(int ii = 0; ii < strlen(sInStr); ii++){if(!IsChineseChar(sInStr + ii)){return FALSE;}}return TRUE;}简单应用应创建下列目录结构,模块程序代码应分别放置到src/include目录与src/source目录,编译文件放置到src/source目录,编译后的可执行文件放置到rel/bin目录,静态库或动态库放置到rel/lib目录(应用使用的外部库及头文件放置在rel同级的lib与lib/include目录)。
Work Directorysrcsourcemakefile*.cpp*.cinclude*.hpp*.hrelbinlib规则5: 复杂应用应分子系统创建目录结构,模块程序代码应分别放置到src/module/include目录与src/module/source目录,应用编译文件放置到src目录,编译后的可执行文件放置到rel/bin目录,静态库或动态库放置到rel/lib目录。
(应用使用的外部库及头文件放置在rel同级的lib与lib/include目录)规则6: 各子系统可以创建独立的编译文件并放置到src/module/source目录,编译后的可执行文件放置到rel/bin/module目录或rel/bin,静态库或动态库放置到rel/lib/module或rel/lib目录。
此时,应创建一个编译全部子系统的编译文件或脚本放置到src目录。
Work Directorysrcmakefile|make.shmodule1sourcemakefile*.cpp*.cinclude*.hpp*.hmodule2sourcemakefile*.cpp*.cinclude*.hpp*.hrelbinlibmodule1binlibmodule2binlib第二章命名规则7: 命名应遵循下列原则:●应简单清晰通俗;●应使用英文命名,禁止使用中文命名;●应尽量选择通用词汇;●应使用完整单词或词组,避免使用简称;●应准确表达其含义;●避免同时使用易混淆的字母与数字,如1与l,0与o;●禁止使用只靠大小写区分的多个名称;●多单词组成的名称,单词的首字母应大写,如FileName。
规则8: 名称太长超过15字符时应使用简称。
简称应遵循:●应使用标准的或常用的简写,如Temp(tmp),Length(len);●应用范围内简写应一致且规范,避免各处简写各不相同;●简写可以使用单词的前一个或多个字母,如Channel(Chan)、Connect(Conn);也可以使用去掉所有的不在词头的元音字母,如screen(scrn),primtive(prmv);●多个单词组成的名称,使用有意义的单词或去掉无用的后缀并简称,如Count ofFailure(FailCnt),Paging Request(PagReq)。
2.1文件命名规则9: 文件命名应使用模块名的小写字母形式。
禁止使用汉字或大、小写字母混用作为代码文件名。
2.2变量命名规则10: 变量命名主要采用匈牙利命名法,格式为[作用域范围前缀_][前缀]基本类型+名称。
其中,作用域范围前缀、前缀以小写字母表示且可选,基本类型以小写字母表示且必选。
前缀符含义例子g_ 全局变量g_stSystem, g_cMacType, g_strSysNames_ 静态变量s_nCurCnt,s_strStaticName,s_pSysTimem_ 类数据成员m_nBankType,m_sWrkBuffer, m_strMyNameh 句柄类变量hnFileHandle,hnSocket,hpProcHandlep 指针类变量psReadBuff,pstrRetStr,ppTargeta 数组类变量anPorts,asSendBuffers,apWrkBuffs前缀符含义例子b bool bOK,bQuit,bFindc、ch char cFlag,cBankType,chSubSystemTypes char [] sSysName,sStaticName,sTimeStrstr CString、String strSysName, strStaticName, strTimeStrby unsign char [] byMacStr,bySendBuffer, bySrcBuffern、i int nCnt,nPort,nRetCodel long lFileSize,lOffset,lCountd double dAmount,dSumVal,dWrkValf float fAmount, fSumVal, fWrkValui/ul unsigned int/long uiCnt, uiFileSize, ulRetCountw WORD 与unsigned int等价的32位整数dw DOUBLE WORD 与unsigned long等价的64位整数em 枚举型变量emDays, emColors, emSetst 结构型编码stSystem,stCtrlData, stSet禁止使用单字母作为变量名。
但下列常用单字母变量除外:变量类型说明i,j,k,m,n int 循环变量c char 单字符变量s char [] 字符数组变量x,y int 位置变量p char* 指针变量2.3常量与宏命名规则12: 常量与宏应使用全大写名称,多词组名称使用_分隔各单词,并使用断行注释说明const int MAX_BUFF_SIZE = 1024 ///< 最大存储区字节数#define MAX_FRAME_SIZE 512 ///< 单帧的最大长度#define E_FILE_NOTFOUND 61101001 ///< 文件不存在!#define E_DB_SELECT_FAIL 62301050 ///< 选取数据库失败!#define E_SYS_INVALID_STATUS 62301001 ///< 系统状态非法!#ifdef _NONE_THROW_#endif…#ifndef _FOR_CCPC_#endif为防止重复包含而定义的头文件预处理宏,应使用__NAME_HPP__(C++)或#ifndef __CSIGNAL_HPP__#define __CSIGNAL_HPP__…#endif#ifndef __CSIGNAL_H__#define __CSIGNAL_H__…#endif2.4类命名规则16: 类命名应使用字符C|T+名称形式。