小额支付系统CC++编程规范.doc_第1页
小额支付系统CC++编程规范.doc_第2页
小额支付系统CC++编程规范.doc_第3页
小额支付系统CC++编程规范.doc_第4页
小额支付系统CC++编程规范.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

C C C C 编程规范编程规范 2005 年年 5 月月 深圳市雁联计算系统有限公司深圳市雁联计算系统有限公司 SHENHEN YLINK COMPUTING SYSTEM CO LTD C C 编程规范 i 目目 录录 第一章第一章 规范说明规范说明 1 1 1 背景说明 1 1 2 目的 1 1 3 内容说明 1 第二章第二章 C C 编程规范编程规范 2 2 1 代码组织与风格 2 2 2 命名 2 2 3 注释 3 2 4 声明 3 2 5 表达式和语句 3 2 6 复用 4 2 7 特殊限制 4 2 8 程序的结构 5 第三章第三章 数据库编程规范数据库编程规范 6 3 1 说明 6 3 2 注意事项 6 第四章第四章 CICS 编程规范编程规范 7 4 1 说明 7 4 2 注意事项 7 第五章第五章 MQ 编程规范编程规范 9 5 1 说明 9 5 2 注意事项 9 第六章第六章 编译环境编译环境 10 6 1 UNIX 下 C C 程序的编译 10 6 2 MAKEFILE的编写 10 附附 1 格式模板格式模板 13 1 命名的约定 13 2 注释 15 3 编程风格 16 C C 编程规范 第 1 页 第一章第一章 规范说明规范说明 1 1 背景背景说明说明 大型软件项目通常由相应的大型开发团队承担 大型团队生成的代码要有项目范 围内可评测的质量 代码必须遵从于某一标准并以此来评价 因此 对于中国现代化 支付系统项目的开发 需要制定一套编程规范 1 2 目的目的 本文表述 C C 编程的规则 用来作为编程的标准 使达到以下目的 增加开发过程代码的强壮性 可读性 易维护性 减少有经验和无经验开发人 员编程所需的脑力工作 在项目范围内统一代码风格 通过人为以及自动的方式对最终软件应用质量标准 使新的开发人员快速适应项目氛围 支持项目资源的复用 允许开发人员从一个项目区域 或子项目团队 移动到 另一个 而不需要重新适应新的子项目团队的氛围 1 3 内容说明内容说明 本文将描述 C C 编程规范 并对 C C 结合数据库 CICS 和 MQ 开发时需注意的 问题进行说明 C C 编程规范 第 2 页 第二章第二章 C C 编程规范编程规范 2 1 代码组织与风格代码组织与风格 1 可读性第一 效率第二 2 程序首先是正确 其次是优美 3 程序结构清析 简单易懂 4 循环 分支层次不要超过五层 5 使用括号以避免二义性 6 对嵌套语句使用小的 一致的缩进风格 缩进量一致并以 Tab 键为单位 定义 Tab 为 4 个字节 7 不同文件中放置模块规约与实现 C 程序头文件扩展名为 hpp 实施文件 扩展名为 cpp C 程序头文件扩展名为 h 实施文件扩展名为 c 8 每个模块规约避免定义多个类 9 避免将私有实施声明置于模块的规约中 10 防止重复文件包含的保护 ifndef module name 使用预处理符 define module name 防止重复 模块定义 endif module name hpp 结束 2 2 命名命名 1 不要声明以一个或多个下划线 开头的名称 2 避免使用只靠字母大小写才能区分的名称 3 选择清晰的 易辨认的 有意义的名称 4 类的名称使用名词或名词短语 5 过程类型的函数名称使用动词 6 异常名选用否定的含义 如使用以下词的一个 C C 编程规范 第 3 页 bad incomplete invalid wrong missing 或 illegal 作为名称的一部分 而不要机械的套用 error 或 exception 因为它们并不表达具体的信息 7 变量 函数等的命名规则可参照附录的命名约定 2 3 注释注释 1 注释原则上要求使用中文 注释与源代码尽可能靠拢 注释可以与语句在同一 行 也可以在上行 2 一目了然的语句不加注释 3 C 程序应使用 C 风格注释分界符 而非 C 风格的 4 每个源程序文件 都有文件头说明 5 每个函数 都有函数头说明 6 注释的作用范围可以为 定义 引用 条件分支以及一段代码 7 主要变量 结构 联合 类或对象 定义或引用时 注释能反映其含义 8 常量定义有相应说明 9 处理过程的每个阶段都有相关注释说明 10 在典型算法前都有注释 2 4 声明声明 1 不要随意定义全局变量 尽量使用局部变量 2 所有变量在调用前必须被初始化 3 尽量使用 class 而不是 struct 来实现抽象数据类型 4 避免在类声明中定义函数 5 函数要尽量只有一个返回点 2 5 表达式和语句表达式和语句 1 当从布尔表达式分支时使用 if 语句 当从离散值分支时使用 switch 语句 当分支条件为离散值时使用 switch 语句而不使用一系列的 else if 2 一定为 switch 语句提供一个 default 分支以记录错误 C C 编程规范 第 4 页 3 当循环需要迭代前测试时使用 for 语句或 while 语句 4 当循环需要迭代后测试时使用 do while 语句 5 循环中避免使用 jump 语句 避免使用除循环结束条件以外的循环退出方式 使用 break return 或 goto 6 禁止 GOTO 语句 7 避免不必要的分支 2 6 复用复用 1 尽量使用标准库函数和公共函数 2 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类 3 公共控件或类应考虑 OO 思想 减少外界联系 考虑独立性或封装性 4 公共控件或类应建立使用模板 5 谨慎使用多继承 因为多继承带来了许多额外的复杂性 2 7 特殊限制特殊限制 1 已删除的对象指针要赋予空指针值 设置已删除对象的指针为空指针可避免灾 难的发生 重复删除非空指针是有害的 但重复删除空指针是无害的 即使在 函数返回前 删除操作后也总要赋一个空指针 因为以后可能添加新的代码 2 C 和 C 内存操作要避免混合使用 C 库函数 malloc calloc 和 realloc 不应用于分配对象空间 此时应使用 C 操作符 new 只有在内存传递给 C 库函数处理时 才使用 C 函数分配内存 不要使用 delete 来释放由 C 函数 分配的内存 3 删除由 new 创建的数组对象时使用 delete 使用 delete 删除数组对象时 如果不使用空方括号 则只删除数组的第一个元素 因此导致内存泄 漏 4 对所有的用户输入 必须进行合法性检查 5 不要比较浮点数的相等 如 10 0 0 1 1 0 不可靠 6 程序与环境或状态发生关系时 必须主动去处理发生的意外事件 如文件能否 逻辑锁定 打印机是否联机等 C C 编程规范 第 5 页 2 8 程序的结构程序的结构 1 程序以说明性段落开始 用于记载程序所属的应用系统 程序名 作者 完成时 间 版本号 主要功能描述 历次修改记录等内容 具体见附件 1 中的注释部分 2 在 MAIN 的主体部分要清晰明了地反映程序的结构 3 每个函数要以一段函数的说明开始 具体见附件 1 中的注释部分 4 当错误或例外条件发生时 都要交由统一的错误处理函数进行处理 整个程序尽量 允许一个正常出口 一个或两个非正常出口 C C 编程规范 第 6 页 第三章第三章 数据库编程规范数据库编程规范 3 1 说明说明 这里所描述的规范仅针对 C C 中嵌入 SQL 编程 数据库 C C 嵌入 SQL 编程与 UNIX C C 编程规范基本相符 3 2 注意事项注意事项 每次完成 EXEC SQL 语句都应检查语句执行是否成功 不要使用 select 不要使用结构型的宿主变量 对于 SQL 语句的书写格式要求一个子句占一行 且注意对齐 如 EXEC SQL SELECT BANKNO ACTNAME INTO szBankno szActname FROM ACCTTABLE WHERE ACTNO 00001 If SQLCODE 0 第四章第四章 CICS 编程规范编程规范 4 1 说明说明 本章对使用 C 语言在 CICS 平台的开发做出相应编码规范 对于命名 注释 程序 C C 编程规范 第 7 页 风格等同 C C 编程规范 4 2 注意事项注意事项 CICS Client 端使用 C 类 包含的头文件为 CICSECI HPP 用于 ECI 类 或者 CICSEPI HPP 用于 EPI 类 每个 CICS 程序都要处理自己的 ABEND 情况 即在 MAIN 的开始使用语句 HANDLE ABEND 来捕获 ABEND 每次调用 CICS 命令后 都应检查其 RESPOND CODE 然后根据 RESPOND CODE 决定程序的走向 如果一旦发生错误 一定要调用统一的错误处理函数来进行处理 对于 CICS 命令的书写格式要求一个子句占一行 且注意对齐 如 EXEC CICS LINK PROGRAM MYPROG SYSID MAIN RESP iResp CICS 会保留一些进程状态 在交易结束时要注意关闭 包括 打开的文件 TCP IP socket 环境变量 共享内存 动态分配内存 在头文件里 不要在内联函数定义中使用 CICS 语句 不要在静态对象的构造函数和析构函数里使用 CICS 语句 静态的构造函数和析构函 数是在一个 CICS LUW 之外调用的 因而在这些地方用 CICS 语句会引起异常 用 C 编写 CICS 程序 必须使用能够 link 线程安全库的编译器 建议使用 cicstcl 来编译 非 CICS 安全的函数以及一些限制 函数或服务函数或服务限制限制 Any function that is not thread safe Do not use exec without fork Do not use setlocale Do not use Shared memory functions Do not attach memory at the address specified with the C C 编程规范 第 8 页 Region Definitions RD RegionPoolBase attribute CICS uses this address for region pool shared memory CICS internal functions Do not use exit or exit Do not use fork Refer to the DCE application programming information stdin stdout stderr Do not use these streams kill Do not send signals to any CICS process raise Do not use assert Do not use abort Do not use sigprocmask Do not use signals Do not use cin cout cerr Do not use these iostream objects DCE asynchronous cancellation Do not use DCE threads You can create threads but you must not use any CICS facility in them Encina TRAN Do not use Encina Transactional C Do not use Encina threadTid Do not use catch in C programs Any exceptions not generated by the application must be rethrown using throw with no argument 用 CICS 语句代替某些 C 函数 用 EXEC CICS LINK EXEC CICS XCTL EXEC CICS START 替代 fork execl system 等 用 EXEC CICS RETURN 替代 exit 用 EXEC CICS GETMAIN 替代 malloc 用 EXEC CICS FREEMAIN 替代 free 用 EXEC CICS SET TASK PURGETYPE PURGE FORCEPURGE 替代 kill 第五章第五章 MQ 编程规范编程规范 5 1 说明说明 本章对使用 C 语言在 MQ 平台的开发做出相应编码规范 对于命名 注释 程序风 格等规范同 C C 编程规范 C C 编程规范 第 9 页 5 2 注意事项注意事项 每次调用 MQI 命令后 都应检查其结果 然后根据结果决定程序的走向 如果一旦发 生错误 一定要调用统一的错误处理函数来进行处理 第六章第六章 编译环境编译环境 6 1 UNIX 下下 C C 程序的编译程序的编译 对于 C 程序 使用 cc 或 xlc 命令编译 对于 C 程序 使用 CC 或 xlC 命令编译 对于 CICS 程序 使用 cicstran 命令预编译 对于 DB2 嵌 SQL 程序 使用 db2 prep 命令预编译 C C 编程规范 第 10 页 对于 Oracle 嵌 SQL 程序 使用 proc 命令预编译 编译顺序为 先预进行 CICS 预编译 再进行数据库预编译 然后进行 C C 编译和 链接 应当为程序的编译编写 makefile 文件 6 2 Makefile 的编写的编写 说 明 Test makefile 日 期 2005 05 23 版 本 v1 0 Copyright c 2005 YLINK ORACLE ORA HOME home oracle ORA OPTS code cpp mode ansi parse no ORA PROC home oracle bin proc ORA INC include CNAPS HOME common common include include CNAPS HOME common utils include include CNAPS HOME beps ccpc include ORA LIB L ORA HOME lib lclntsh lC r CICS CICS HOME usr lpp cics CICS OPTS p100 nmain bI CICS HOME lib cicsprCpp exp CICS PROC CICS HOME bin cicstran l IBMCPP CICS INC I CICS HOME include IBM MQ C C 编程规范 第 11 页 MQ LIB lmqm r SYBASE SYBASE HOME sybase SYBASE INC I SYBASE HOME include SYBASE LIB SYBASE HOME lib libsybdb a lnsl lsocket COMMONLIB COMM HOME HOME CommLib COMM OPTS D CNAPS PATH ENV NAME BEPSHOME COMM INC I COMM HOME lib include I include COMM LIB L COMM HOME lib lCnapsSvr lCommon COMM OBJS CNAPS Compiler and Linker CC xlC r4 CCS usr ibmcxx bin makeC SharedLib PUBLIC rule for build all file SUFFIXES pc cpp ccs C o ibmcpp so ccs pc CICS PROC mv C pc pc C C C 编程规范 第 12 页 ORA PROC ORA OPTS ORA INC iname oname C o CC COMM OPTS COMM INC CICS INC SYBASE INC c cpp o CC COMM OPTS COMM INC CICS INC SYBASE INC c o ibmcpp CCS CICS OPTS o COMM LIB ORA LIB MQ LIB o so CC K PIC G o all BCSVTEST clean rm o rm a rm C BCSVTEST BCSVTEST BCSVTEST o bc public o bc cmt301 o CCS CICS OPTS o ibmcpp COMM LIB ORA LIB MQ LIB BCSVTEST o bc public o bc cmt301 o build TagBuilder o CC o COMM LIB ORA LIB MQ LIB TagBuilder o 附附 1 格式模板格式模板 1 命名的约定命名的约定 命名规则主要采用匈牙利命名法 命名必须具有一定的实际意义 1 变量命名变量命名 形式为 xAbcFgh x 由变量类型确定 Abc Fgh 表示连续意义字符串 如果连续意义 字符串仅两个 可都大写 如 OK 用小写字母的前缀表示变量的类型 前缀的下一个字母用 大写 C C 编程规范 第 13 页 前缀 类型 例子 b Boolean bIsParent by 字节 byFlag ch char chText c 类对象 cMain 对象实例 d Double dAmount fn Function fnCallback h Handle 句柄 hWnd i int iCount n 无符号整型 nErrCode p 指针 pMsg sz str 字符串 szName w WORD wCode x y 坐标 xPos yPos 其它前缀 m 类成员变量 m nVal m bFlag g 全局变量 g nMsg g bFlag 局部变量中可采用如下几个通用变量 nTemp nResult I J 一般用于循环变量 2 常量命名和宏定义常量命名和宏定义 常量和宏定义必须具有一定的实际意义 常量和宏定义在 include 和函数定义之间 常量 和宏定义必须全部以大写字母来撰写 中间可根据意义的连续性用下划线连接 每一条定义的 右侧必须有一简单的注释 说明其作用 示例 define MAX LENGTH 500 最大长度 3 函数命名函数命名 函数原型说明包括引用外来函数及内部函数 外部引用必须在右侧注明函数来源 模 块名及文件名 如是内部函数 只要注释其定义文件名 第一个字母必须使用大写字母 要求 用大小写字母组合规范函数命名 必要时可用下划线间隔 示例 void UpdateDB Tfgd TRACK NAME Module Name r01 sdw c void PrintTrackData TRACK NAME Module Name r04 tern c C C 编程规范 第 14 页 void ImportantPoint void Module Name r01 sdw c void ShowChar int int chtype Local Module void ScrollUp V int int Local Module 4 结构体命名结构体命名 结构体类型命名必须全部用大写字母 结构体变量命名必须用大小写字母组合 第一个 字母必须使用大写字母 必要时可用下划线间隔 示例 typedef struct char szProductName 20 char szAuthor 20 char szRel

温馨提示

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

评论

0/150

提交评论