软件编码规范.doc_第1页
软件编码规范.doc_第2页
软件编码规范.doc_第3页
软件编码规范.doc_第4页
软件编码规范.doc_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件编码规范 RDC DED SCS 中国人民银行清算总中心支付系统开发中心 1 98 软软软软软软件件件件件件编编编编编编码码码码码码规规规规规规范范范范范范 文件编号 RDC DED SCS SPC 00 当前版本 作 者 审 核 人 文件状态 草稿 正式发布 正在修改 完成日期 中国人民银行清算总中心 支付系统开发中心 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 2 98 文档修订记录 版本编号变化状态简要说明日期变更人批准日期批准人 注 变化状态 A 增加 M 修改 D 删除 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 3 98 目目 录录 第一篇第一篇C C C C 编码规范编码规范 6 6 第一章第一章代码组织代码组织 6 6 第二章第二章命名命名 9 9 2 1文件命名 9 2 2变量命名 9 2 3常量与宏命名 10 2 4类命名 10 2 5函数命名 10 2 6参数命名 11 第三章第三章注释注释 1212 3 1文档化注释 12 3 2语句块注释 17 3 3代码维护注释 20 第四章第四章编码风格编码风格 2222 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 第五章第五章编译编译 4141 第六章第六章ESQL CESQL C 编码编码 4646 第二篇第二篇JAVAJAVA 编码规范编码规范 4747 第一章第一章代码组织代码组织 4848 第二章第二章命名命名 5151 2 1包命名 51 2 2类命名 51 2 3接口命名 51 2 4方法命名 51 2 5变量命名 51 2 6类变量命名 52 2 7常量命名 52 2 8参数命名 52 第三章第三章注释注释 5353 3 1文档化注释 53 3 2语句块注释 57 3 3代码维护注释 59 第四章第四章编码风格编码风格 6161 4 1排版风格 61 4 2包与类引用 66 4 3变量与常量 66 4 4类编写 67 4 5方法编写 68 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 4 98 4 6异常处理 71 4 7特殊限制 71 第五章第五章编译编译 7373 第六章第六章JSPJSP 编码编码 7474 6 1文件命名及存放位置 74 6 2内容组织 74 6 3编码风格 76 6 4注释 78 6 5缩进与对齐 78 6 6表达式 79 6 7JavaScript 79 第三篇第三篇POWERBUILDERPOWERBUILDER 编码规范编码规范 8080 第一章第一章代码组织代码组织 8181 第二章第二章命名命名 8282 2 1文件命名 82 2 2对象命名 82 2 3变量命名 84 2 4常量命名 85 2 5函数与事件命名 85 2 6参数命名 85 第三章第三章注释注释 8585 3 1文档化注释 85 3 2语句块注释 88 3 3代码维护注释 88 第四章第四章编码风格编码风格 8989 4 1界面风格 89 4 2排版风格 93 4 3变量与常量 95 4 4条件判断 96 4 5空间申请与释放 97 4 6函数编写 97 4 7特殊限制 97 第五章第五章SQLSQL 编码编码 9898 软件编码规范 RDC DED SCS 中国人民银行清算总中心支付系统开发中心 5 98 前前 言言 程序编码是一种艺术 既灵活又严谨 充满了创造性与奇思妙想 然而应用软件设计是一 项团结协作工程 而非程序员展示个人艺术的舞台 大型应用软件项目更是由很多程序员组成 的大型开发团队协同完成的 每个程序员都有自己的编码经验与风格 如果缺乏统一的编程规 范 则可能导致软件产品最终程序代码风格迥异 可读性与可维护性均较差 不仅给程序代码 的理解带来障碍 也增加维护阶段的工作量 此外 经验证明不规范的编码行为往往还会导致 程序出现更多的隐含错误 为规范编码行为 增强程序代码的可读性 可维护性 提高编码质量与效率 保障应用软 件产品整体品质与可持续开发性 特制定本规范 本规范分 C C 编码规范 Java 编码规范 PB 编码规范三篇 分别从代码组织 命名 注释 编码风格 编译等方面加以阐述 规范文本 分为规则与建议两种 其中规则是强制执行的条款 建议则由程序员根据实际情况灵活掌握 软件编码规范 RDC DED SCS 中国人民银行清算总中心支付系统开发中心 6 98 第一篇第一篇C C C C 编码规范编码规范 第一章第一章代码组织代码组织 规则规则 1 1 使用不同的文件分别放置模块的约束与实现 C 程序的约束文件使用 hpp 做扩展 名 实现文件使用 cpp 做扩展名 C 程序的约束文件使用 h 做扩展名 实现文件使用 c 做扩展 名 规则规则 2 2 一个模块可以包含一个类或功能上紧密联系的多个类 禁止将功能关联松散的多 个类 放置到一个模块中 规则规则 3 3 模块约束应仅包含模块对外提供的功能 禁止将模块内部使用的功能声明在模块 约束中 下例中 IsChineseChar 是内部使用的函数 不提供给外部应用使用 因此不能在 commpub hpp 中增加声明 例 commpub hpp BOOL IsChineseString const char sInStr 例 commpub cpp staticstatic BOOLBOOL IsChineseChar constIsChineseChar const char char s s BOOL IsChineseString const char sInStr for int ii 0 ii strlen sInStr ii if IsChineseChar sInStr ii return FALSE return TRUE 规则规则 4 4 简单应用应创建下列目录结构 模块程序代码应分别放置到 src include 目录与 src source 目录 编译文件放置到 src source 目录 编译后的可执行文件放置到 rel bin 目录 静态库或动态库放置到 rel lib 目录 应用使用的外部库及头文件放置在 rel 同级的 lib 与 lib include 目录 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 7 98 Work Directory src source makefile cpp c include hpp h rel bin lib 规则规则 5 5 复杂应用应分子系统创建目录结构 模块程序代码应分别放置到 src module include 目录与 src module source 目录 应用编译文件放置到 src 目录 编译后 的可执行文件放置到 rel bin 目录 静态库或动态库放置到 rel lib 目录 应用使用的外部库 及头文件放置在 rel 同级的 lib 与 lib include 目录 规则规则 6 6 各子系统可以创建独立的编译文件并放置到 src module source 目录 编译后的 可执行文件放置到 rel bin module 目录或 rel bin 静态库或动态库放置到 rel lib module 或 rel lib 目录 此时 应创建一个编译全部子系统的编译文件或脚本放置到 src 目录 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 8 98 Work Directory module1 source makefile cpp c include hpp h rel bin lib module2 source makefile cpp c include hpp h makefile make sh src module1 bin lib module2 bin lib 软件编码规范 RDC DED SCS 中国人民银行清算总中心支付系统开发中心 9 98 第二章第二章命名命名 规则规则 7 7 命名应遵循下列原则 应简单清晰通俗 应使用英文命名 禁止使用中文命名 应尽量选择通用词汇 应使用完整单词或词组 避免使用简称 应准确表达其含义 避免同时使用易混淆的字母与数字 如 1 与 l 0 与 o 禁止使用只靠大小写区分的多个名称 多单词组成的名称 单词的首字母应大写 如 FileName 规则规则 8 8 名称太长超过 15 字符时应使用简称 简称应遵循 应使用标准的或常用的简写 如 Temp tmp Length len 应用范围内简写应一致且规范 避免各处简写各不相同 简写可以使用单词的前一个或多个字母 如 Channel Chan Connect Conn 也 可以使用去掉所有的不在词头的元音字母 如 screen scrn primtive prmv 多个单词组成的名称 使用有意义的单词或去掉无用的后缀并简称 如 Count of Failure FailCnt Paging Request PagReq 2 12 1文件命名文件命名 规则规则 9 9 文件命名应使用模块名的小写字母形式 禁止使用汉字或大 小写字母混用作为 代码文件名 2 22 2变量命名变量命名 规则规则 10 10 变量命名主要采用匈牙利命名法 格式为 作用域范围前缀 前缀 基本类型 名 称 其中 作用域范围前缀 前缀以小写字母表示且可选 基本类型以小写字母表示且必选 常用前缀符常用前缀符 前缀符含义例子 g 全局变量g stSystem g cMacType g strSysName s 静态变量s nCurCnt s strStaticName s pSysTime m 类数据成员m nBankType m sWrkBuffer m strMyName h 句柄类变量hnFileHandle hnSocket hpProcHandle p 指针类变量psReadBuff pstrRetStr ppTarget a 数组类变量anPorts asSendBuffers apWrkBuffs 常用基本类型符常用基本类型符 前缀符含义例子 bbool bOK bQuit bFind c ch char cFlag cBankType chSubSystemType schar sSysName sStaticName sTimeStr str CString String strSysName strStaticName strTimeStr byunsign char byMacStr bySendBuffer bySrcBuffer n i int nCnt nPort nRetCode llong lFileSize lOffset lCount ddouble dAmount dSumVal dWrkVal ffloatfAmount fSumVal fWrkVal ui ulunsigned int longuiCnt uiFileSize ulRetCount wWORD 与 unsigned int 等价的 32 位整数 dwDOUBLE WORD 与 unsigned long 等价的 64 位整数 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 10 98 em 枚举型变量 emDays emColors emSet st 结构型编码stSystem stCtrlData stSet 规则规则 11 11 禁止使用单字母作为变量名 但下列常用单字母变量除外 常用单字母变量常用单字母变量 变量类型说明 i j k m nint 循环变量 cchar 单字符变量 schar 字符数组变量 x yint 位置变量 pchar 指针变量 2 32 3常量与宏命名常量与宏命名 规则规则 12 12 常量与宏应使用全大写名称 多词组名称使用 分隔各单词 并使用断行注释说明 其含义如 const int MAX BUFF SIZE 1024 最大存储区字节数 define MAX FRAME SIZE 512 单帧的最大长度 规则规则 13 13 作为错误码或返回码的宏 应使用 E 类型 NAME 形式 并使用断行注释说明其含 义 define E FILE NOTFOUND 61101001 文件不存在 define E DB SELECT FAIL 62301050 选取数据库失败 define E SYS INVALID STATUS 62301001 系统状态非法 规则规则 14 14 作为编译条件的宏 应使用 形式 如 ifdef NONE THROW endif ifndef FOR CCPC endif 规则规则 15 15 为防止重复包含而定义的头文件预处理宏 应使用 NAME HPP C 或 NAME H C 形式 其中 NAME 为模块名称 如 ifndef CSIGNAL HPP define CSIGNAL HPP endif ifndef CSIGNAL H define CSIGNAL H endif 2 42 4类命名类命名 规则规则 16 16 类命名应使用字符 C T 名称形式 其中名称应使用名词或名词短语 且每个单词 首字母大写 如 CSignal CFile CString CTagMgr 2 52 5函数命名函数命名 规则规则 17 17 函数命名应使用能够表达函数功能的英文动词或动宾结构短语 且每个单词的首 字母大写 如 GetName StrTrimLeft KillProc 禁止在函数名称中使用非字母或数 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 11 98 字的其他字符 如下划线 建议建议 1 1 不应在函数名中使用数字 如 GetName1 Kill2 但数字是短语一部分的 可以使用 如 KillSigusr2 2 62 6参数命名参数命名 建议建议 2 2 函数或方法的参数命名参考变量命名 但应使用 In Out Ret 等简写修饰参数 增加函数声明的可读性 如 BOOL IsSpaceStr LPCSTR sInStr ULONG nMaxLen 0 ULONG plRetOffset NULL void HexToBin LPCSTR sInStr BYTE psOutStr ULONG plRetSize NULL 软件编码规范 RDC DED SCS 中国人民银行清算总中心支付系统开发中心 12 98 第三章第三章注释注释 规则规则 18 18 程序代码中增加注释的目标是帮助对程序的阅读理解 不宜太多或太少 太多则 会对阅读产生干扰 太少则不利于代码理解 因此只在必要的地方才加注释 且准确 易懂 简洁 3 13 1文档化注释文档化注释 3 1 13 1 1文件注释文件注释 规则规则 19 19 文件注释放置在文件头部 主要包括此文件的功能说明 编写人和修改人以及编 写和修改的日期 版权声明 版本等信息 应尽量使用中文 注释格式如下 file filename hppfilename hpp brief 文件简要说明文件简要说明 文件详细说明文件详细说明 author 时间时间 作者作者 1 1 贡献贡献 1 1 时间 作者 2 贡献 2 时间 作者 3 贡献 3 version 时间时间 版本版本 1 1 简要版本说明简要版本说明 1 1 时间 版本 2 简要版本说明 2 par 其他重要信息 其他重要信息说明 warning 警告信息 par 版权信息 版本声明信息版本声明信息 例 file csignal hpp brief UNIX 信号函数封装类 本类封装部分 UNIX 信号处理函数 简化在 UNIX 下编写信号处理程序的编码难度 本类主要提供下列三类方法 信号集合管理 提供信号集合的添加 删除 判断功能 信号句柄管理 提供设置与获取信号处理函数功能 信号处理 设置与获取阻塞信号集 发送信号 等待信号功能 author 2007 03 05 lny 创建初始版本 2007 03 07 lny 添加文档注释信息 version 2007 03 05 V1 0 创建初始版本 2007 03 07 V2 0 添加文档注释信息 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 13 98 warning 本类不能在 WIN32 操作系统使用 par 版权信息 Copyright C Copyright C 2007 20072007 2007 CNCC CDCCNCC CDC 注 粗体字为需定制化的内容 兰色字为可选的内容 如果没有这些内容 请删除 下同 3 1 23 1 2类注释类注释 规则规则 20 20 类注释放置在类声明前 主要介绍类的功能及相关说明 注释格式如下 brief 类简要说明类简要说明 类详细说明类详细说明 par 其他重要信息 其他重要信息说明 par 变更历史 时间 作者 修改说明 例 brief UNIX 信号处理函数封装类 本类封装部分 UNIX 信号处理函数 简化在 UNIX 下编写信号处理程序的编码难度 本类主要提供下列三类方法 信号集合管理 提供信号集合的添加 删除 判断功能 信号句柄管理 提供设置与获取信号处理函数功能 信号处理 设置与获取阻塞信号集 发送信号 等待信号功能 warning 本类不能在 WIN32 操作系统使用 class CSignal 3 1 33 1 3函数或方法注释函数或方法注释 规则规则 21 21 函数或方法注释放置在其声明前 主要介绍函数的功能 参数 返回值 异常 使用说明 范例 引用关系 变更信息等信息 注释格式如下 brief 函数功能简要说明函数功能简要说明 param in out 参数名称 1 参数 1 简要说明 param in out 参数名称 2 参数 2 简要说明 return 返回值说明 返回值 1 返回值 1 说明 返回值 2 返回值 2 说明 exception 异常说明 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 14 98 异常 1 异常 1 说明 异常 2 异常 2 说明 note 函数功能详细说明 详细说明 1 详细说明 2 warning 警告信息 deprecated 函数即将失效警告 see 引用说明 par 使用范例 code 例子程序 endcode par 算法或流程说明 详细算法或流程说明 par 变更历史 时间 作者 修改说明 例 brief 添加一个或多个信号到信号集合 param out stSet 要操作的信号集合 param in nSignal 要添加到集合的信号 param in nOtherSignal 要添加到集合的其他信号 return 添加失败返回负整数 失败原因可以从 errno 获取 note 如果要添加多个信号 则必须使用 0 作为最后一个信号 warning 如果添加多个信号时没有使用 0 作结束 则程序可能异常中止 see DelFromSet AddAllToSet ClearSet par 使用范例 code int nRetCode sig AddToSet if nRetCode 0 Fail nRetCode sig AddToSet if nRetCode 0 Fail endcode int AddToSet sigset t stSet int nSignal int nOtherSignal 0 建议建议 3 3 重要的或复杂的函数 应提供算法说明或使用范例 如 例 brief 根据行号与密码生成报尾校验码作为身份认证串 param in sBankCode 行号 param in sPassword 密码 return 身份认证串 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 15 98 par 算法介绍 计算 sBankCode sPassword 的 MD5 数字摘要 输出 32 位字符 取 32 位字符的 0 5 10 15 16 21 26 31 位作 16 位字符串的偶数位 取 AUTHBEPS 各位作 16 位字符串的奇数位 加密这 16 位的字符串 得到 32 位的字符串作为认证串 CString BuildAuthStr LPCSTR sBankCode LPCSTR sPassword 3 1 43 1 4数据成员注释数据成员注释 规则规则 22 22 类的每个数据成员均使用断行注释 注释格式如下 例 class CMTMsg private BOOL m bBodyInFile 是文件型报文 CString m strFileName 文件型报文的文件名 CString m strBody 直接设置的报体串 CMTMsgHeader m Header 报头对象 CMTMsgTail m Tail 报尾对象 CMTBatHeader m BatHeader 批量业务头对象 3 1 53 1 5结构注释结构注释 规则规则 23 23 结构可使用简单注释 也可使用与类相同的注释格式 其数据成员使用断行注释 注释格式如下 例 报头结构 总长度 138 字节 struct CMTHeaderMap char blockMark 3 报头块前缀 1 char verID 1 版本号 保留 0 char mesgLen 6 报文总长度 保留 目前为空白 char appTradeCode 8 业务码 0 位 系统号 1 3 位 CMT 号 4 位 节点 5 7 位 保留 char startAddr 12 报文源地址 即报文发起人 char destAddr 12 报文目标地址 即报文接收人 char mesgPurp 1 报文用途 保留 char outForm 1 输出标识 保留 char mesgID MSGID LEN 报文标识号 报文发起人生成 通信层唯一确定 一个报文 char mesgReqNo REQUESTID LEN 报文参考号 报文发起人生成 回应报文带 回进行报文匹配 char workDate 8 报文日期 格式为 YYYYMMDD char sentTime 14 报文时间 格式为 YYYYMMDDHHMISS char expTime 4 报文有效期 保留 0 0 xFFFF 65535 char deliTime 6 报文提交时间 保留 格式为 HHMISS char mesgPRI 1 报文优先级 0 x0 0 xF 15 char reserve 20 保留域 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 16 98 char finalMark 1 报头块后缀 3 1 63 1 6宏与变量注释宏与变量注释 规则规则 24 24 宏与变量使用简单注释或断行注释 特别重要的宏可以使用与类相同的文档注释 注释格式如下 例 define MBT PREFIX 报文块开始标志 define MBT SUFFIX 报文块结束标志 define MBT HEADER 1 报头块开始标志 define MBT BUSINESSHEADER 2 业务头块开始标志 define MBT BUSINESSDATA 3 正文块开始标志 define MBT TAIL C 报尾块开始标志 define MBT FILE F 文件说明块开始标志 define MBT BATHEADER B 批量信息块开始标志 define TAG PREFIX TAG 名开始标志 define TAG SUFFIX TAG 名结束标志 define MSGID LEN 20 报文标识号长度 MSGID define REQUESTID LEN 20 报文参考号长度 REQID 例 业务头保留域长度 define CMTBH RESERVED LEN 16 例 brief 短报文正文体最大长度 此长度应根据 MQCMT 类定义最大消息长度进行调整 超过此长度的报文应分为多个报 文片断传输 par 计算公式 code 最大长度 MQCMT 消息长度 sizeof CMTMsgHeader sizeof CMTMsgTail sizeof MQMsg 1 MQCMT 最大消息长度 175 endcode 目前 MQCMT 类定义的最大消息长度为 1M 1048576 字节 define SHORT MSGBODY MAX LEN 1000000 3 1 73 1 7文档注释技巧文档注释技巧 建议建议 4 4 为使 doxygen 工具能生成更好的文档 编写文档注释时参考下列技巧 注释中使用的标识符前后均应留一个空格 以便 doxygen 识别此标识符 并自动生成 一个引用连接 如 par CMT 报文格式说明 CMT 报文由报头 CMTMsgHeader 可选的批量业务头 CMTBatHeader 正文 体 报尾 CMTMsgTail 组成 其中除正文体外 其余各块都是定长的 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 17 98 正文体由一个或多个业务块组成 每个业务块由一个定长的业务头 CMTBusinessHeader 与一个变长正文块 CMTBusinessData 组成 正文块 CMTBusinessData 由一个或多个 TAG 码 TAG 值对 报文域 组成 部分 TAG 值又可由多个定长子域组成 正文体可放置在报文中 也可存储在文件中 而在报文中仅放置文件名 当正文体在文件中 则说明批量业务头 业务头 正文块存储在文件中 注释中可使用 HTML 标记美化最终文档 但别滥用美化标记 较长的文档注释需要分段说明时 使用分段 如果需要段首缩进两字符 使用全 角的空格 文档注释中可以使用 par 增加一个小节 灵活使用此标记可以任意地扩展文档的结构 满足特殊描述的需要 如 par 算法原理 计算机内部运算使用的基数是 2 即满 2 进位 如果计算机字长为 32 位 则最大 可以表示的整数为 4294967296 为了突破计算机最大整数的限制 可以采取两种做法 一是扩大基数 二是增加字 长 根据此原理 本类使用 65536 作为基数 每个整数的最大位数 10 unsigned int array 10 因此可以最大整数是 65536 的 10 次方 约 1 4e48 通过变更基数或位数 本类理 论上可以处理的任意整数 需要生成圆点列表时使用 需要生成编号列表时使用 需要特别说明一段文字 可以使用 code endcode 如 par 计算公式 code 最大长度 MQCMT 消息长度 sizeof CMTMsgHeader sizeof CMTMsgTail sizeof MQMsg 1 MQCMT 最大消息长度 175 endcode 为使 doxygen 正确生成函数或方法的连接 注释中的函数名或方法名前后应留一个空 格 如该函数或方法没有重载 则不必使用参数列表 如 GetTag 如该函数或方法 重载 则应必须使用参数 类型 列表 如 GetTag LPCSTR AMOUNT return 清除行计数 static int nLineChars 0 输出的行长度计数 if bResetLineChars 行计数复位 nLineChars 0 计算输出长度 int nOutLen 2 4 nInpLen 3 1 考虑到要添加回车换行 多分配点空间 char p strOutStr GetBufferSetLength nOutLen memset p 0 nOutLen 例 逻辑性较强 1 BankCode Password CString strWrkStr sWrkBankCode sWrkPassword 2 计算 MD5 指纹 CString strMD5 md5 HashBuffer BYTE strWrkStr GetBuffer 0 strWrkStr GetLength 3 选取八位数字指纹 char p strMD5 GetBuffer 0 char sTmpStr 17 int ii 0 memset sTmpStr 0 sizeof sTmpStr for ii 0 ii 8 ii sTmpStr 2 ii p 4 ii ii 4 4 组合固定串 p AUTHBEPS for ii 0 ii80 字符 或表达式应分成多行书写 语句应在逗号分隔符处划分新 行 表达式应在低优先级操作符处划分新行 操作符放在新行之首 划分出的新行要进行适当 的缩进 使排版整齐 语句易读 例 if IsNumberString stCIS410Detail sBankCode strlen stCIS410Detail sBankCode 12 strcmp stCIS410Detail sBankCode stCIS410Detail sOrgBankCode 0 应书写为 If IsNumberString stCIS410Detail sBankCode strlen stCIS410Detail sBankCode 12 strcmp stCIS410Detail sBankCode stCIS410Detail sOrgBankCode 0 THROW OUT E INVALIDLIST StrPrint 票交机构行别非数字或长度非 3 位 s stCIS410Detail sClsCode GetBuffer 0 应书写为 THROW OUT E INVALIDLIST StrPrint 票交机构行别非数字或长度非 3 位 s stCIS410Detail sClsCode GetBuffer 0 建议建议 8 8 对结构的多个数据成员赋值时 将等号对齐 例 rect top 0 rect left 0 rect right 300 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 23 98 rect bottom 200 应书写为 rect top 0 rect left 0 rect right 300 rect bottom 200 建议建议 9 9 定义多个宏或初始化多个变量时 将值对齐 例 define MBT PREFIX 报文块开始标志 define MBT SUFFIX 报文块结束标志 define MBT HEADER 1 报头块开始标志 define MBT BUSINESSHEADER 2 业务头块开始标志 define MBT BUSINESSDATA 3 正文块开始标志 define MBT TAIL C 报尾块开始标志 define MBT FILE F 文件说明块开始标志 define MBT BATHEADER B 批量信息块开始标志 define TAG PREFIX TAG 名开始标志 define TAG SUFFIX TAG 名结束标志 应书写为 define MBT PREFIX 报文块开始标志 define MBT SUFFIX 报文块结束标志 define MBT HEADER 1 报头块开始标志 define MBT BUSINESSHEADER 2 业务头块开始标志 define MBT BUSINESSDATA 3 正文块开始标志 define MBT TAIL C 报尾块开始标志 define MBT FILE F 文件说明块开始标志 define MBT BATHEADER B 批量信息块开始标志 define TAG PREFIX TAG 名开始标志 define TAG SUFFIX m chMsgType MQ MT TAIL iSegmentFlag SF LASTSEGMENT strncpy ptr m pBody char pTail sizeof CMTTailMap return Put LPCSTR ptr strMsgId sizeof MQMsg sizeof CMTTailMap 1 iSegmentFlag nPriority iFeedbackCode 应书写为 ptr m chMsgType MQ MT TAIL iSegmentFlag SF LASTSEGMENT strncpy ptr m pBody char pTail sizeof CMTTailMap return Put LPCSTR ptr strMsgId sizeof MQMsg sizeof CMTTailMap 1 iSegmentFlag nPriority iFeedbackCode 规则规则 33 33 比较操作符 赋值操作符 算术操作符 逻辑操作符 位域操作符等双目运算符 前后应加空格与操作数隔开 例 i i 1 if i 10 i i 2 应书写为 i i 1 if i 10 i ii 2 规则规则 34 34 逗号 分号后面应加空格 但前面不应加空格 例 for int ii 0 ii 10 ii 应书写为 for int ii 0 ii 10 for ii 0 ii 10 for ii 0 ii m nNamem nName str str 应书写为 CString str stSet GetName strOrgName stSet GetName strOrgName if str str uname uname pOldSet m nNamepOldSet m nName str str 4 1 34 1 3括号使用括号使用 规则规则 37 37 复杂的表达式应使用括号以避免二义性 不应依赖运算符优先级 如 if i 0 i 12 p 1 规则规则 38 38 位运算时应使用括号 如 i nSumVal 4 规则规则 39 39 return 与 throw 非函数 不应使用括号 如 return nRetCode 4 24 2头文件头文件 规则规则 40 40 头文件应使用防止重复包含宏括整个头文件部分 宏名应为 模块名 HPP 或 模块名 H 注意 注意 endif endif 后必须保留一个空行 否则部分编译器会报警告信息 后必须保留一个空行 否则部分编译器会报警告信息 规则规则 41 41 本模块需要的头文件以及外部函数 应全部列在本模块头文件的首部且紧临防重 复包含宏 并按先系统级 公共级 应用级 本模块级的顺序摆放 尽量不在实现文件中包含 除本模块头文件外的其他头文件以及外部函数 规则规则 42 42 头文件引用禁止含路径信息 无论是全路径还是相对路径 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 27 98 规则规则 43 43 禁止在头文件中定义变量或常量 例 头文件 cis401 hpp ifndef MODULE NAME HPP define MODULE NAME HPP include include include PUBLIB src include common hpp PUBLIB src include common hpp include include include cispub hpp include cispub hpp intint g nUserCodeg nUserCode 0 0 endif 例 实现文件 cis401 cpp include include include include cstring hpp cstring hpp include include include cis401 hpp include cis401 hpp externextern longlong GetFileSize LPCSTRGetFileSize LPCSTR sFileName sFileName cis401 hpp 应书写为 ifndef MODULE NAME HPP define MODULE NAME HPP include include include common hpp include cstring hpp include cispub hpp extern long GetFileSize LPCSTR sFileName extern int g nUserCode endif cis401 cpp 应书写为 include cis401 hpp int g nUserCode 0 4 34 3宏定义宏定义 建议建议 15 15 灵活使用编译宏解决平台或版本的兼容性问题 例 cpp ifdef WIN32 in WIN32 void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 28 98 fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp else in UNIX void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp endif 应修改为 hpp ifdef WIN32 define define vsprintfvsprintf vsprintf vsprintf endif cpp void printTrace LPCSTR lpName LPCSTR lpText char szTmp 4096 memset szTmp 0 sizeof szTmp va list argList va start argList lpText vsprintf szTmp vsprintf szTmp lpText lpText argList argList va end argList fprintf stderr s s s n StrCurrentTime YYYY MM DD HH MM SS GetBuffer 0 lpName szTmp 规则规则 44 44 宏表达式的变量应使用括号括 使用宏时应避免传递表达式给宏变量 例 define MAX a b a b a b 应书写为 define MAX a b a b a b 调用 int nMax MAX i b 应书写为 int nTmpi i int nTmpb b 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 29 98 int nMax MAX nTmpi nTmpb 规则规则 45 45 单条语句构成的宏不应使用分号作为宏结束 多条语句构成宏时 应使用花括号 括宏体 例 define ThrowExceptionExt sFileName nErrCode sExtMsg ThrowFileExceptionExt FILE LINE sFileName nErrCode sExtMsg return nErrCode define RETCODE n return n 应书写成 define ThrowExceptionExt sFileName nErrCode sExtMsg ThrowFileExceptionExt FILE LINE sFileName nErrCode sExtMsg return nErrCode define RETCODE n return n 规则规则 46 46 构成宏体的语句必须完成 禁止包含语句块的部分 例 define CLEAR ALL n for int ii 0 ii n ii CLEAR ALL strlen str str ii 0 define CLEAR ALL n for int ii 0 ii n ii str ii 0 以上两例应书写为 define CLEAR ALL str n for intint iiii 0 0 ii n ii str ii 0 即使这样 代码依然是不安全的 应避免在宏中定义变量 规则规则 47 47 禁止使用宏替换关键字 如下列为不良写法 define MYENUM enum MYENUM err E DATE 1 E TIME 2 软件编码规范 RDC DED SCS SPC 00 00 中国人民银行清算总中心支付系统开发中心 30 98 建议建议 16 16 使用 enum 或 const int 或 inline 函数代替宏 例 define MAX FRAME SIZE 1024 define ERR DATE 1 define ERR TIME 2 define ERR TASK NO 3 define ExitOnFail if g nErrCode 0 return g nErrCode 应书写为 const int MAX FRAME SIZE 1024 enum ERR TYPE ERR DATE 1 ERR TIME 2 ERR TASK NO 3 inline int ExitOnFail if g nErrCode 0 return g nErrCode 4 44 4变量与常量变量与常量 规则规则 48 48 避免使用与全局变量 外部变量同名的局部变量 禁止使用关键字 保留字 函 数名作为变量名 如下列为不良写法 例 int nMaxSize 100 intint strlenstrlen 1 for i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论