




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 1 19 代码审查规范 软件开发中心软件开发中心 C ESQL CICS 语言编程规范语言编程规范 文档编号 项目编号 项目名称 类别规范制度 密级内部 路径 开发部门 质量管理部基础管理组 编写整理者 高斌 修订记录 日期版本修订目的描述作者 2003 2 3V 1 0创建 软件开发中心 C SQL CICS 编程规范 高斌 2004 4 20V 1 1修改 软件开发中心 C SQL CICS 编程规范 高斌 2006 9 14V 1 2修订第 6 页第 6 行 增加 1 6 1 函数声明 第 20 页第 27 行 高斌 2007 8 9V1 3删除 2 4 游标的使用 删除第四章 与 AS400 相 关的部分 高斌 2010 7 1V1 3 1修订农行图标 增加第 9 页第 29 行关于表达式 优先级要求 增加第 14 页第 16 行 对资源使用 要求 增加第 16 页 26 行 对 CICS 中 SQL 提交 语句的使用说明 高斌 2010 12 25V1 3 2修订 V1 4 为 V1 3 1 王海龄 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 2 19 代码审查规范 修订 中国农业银行软件开发中心 C 语 言编程规范 V1 3 1 的 1 1 2 函数命名 补充 主机函数名按照子系统增加子系统 前缀 子系统名不允许重名 内容 删除 如果确实需要使用重名函数 属于本文 件内部使用的函数建议加上 static 防止 在链接时发生重名错误 补充 1 1 4 源 文件命名 同一项目中的源文件不允许重 名 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 3 19 代码审查规范 目录目录 1 C 语言编程规范语言编程规范 4 1 1 命名规范 4 1 1 1 变量命名 4 1 1 2 函数命名 5 1 1 3 宏命名 5 1 2 注释 6 1 2 1 文件头 6 1 2 2 函数头 6 1 2 3 内部注释 7 1 2 4 标注型注释 7 1 3 头文件 7 1 4 变量定义及初始化 7 1 5 表达式和语句 8 1 5 1 表达式 8 1 5 2 运算符优先级 8 1 5 3 语句 9 1 5 4 缩进格式 12 1 5 5 空行 12 1 5 6 空格 12 1 5 7 续行 12 1 6 函数 13 1 6 1 参数的规则 13 1 6 2 返回值的说明 13 1 7 编译和链接 14 1 8 调试 14 2 普通环境下的普通环境下的 C ESQL 编程规范编程规范 14 2 1 头文件 14 2 2 数组变量的定义 14 2 3 SQL 语句的编写规范 15 2 4 游标的使用 15 3 CICS 环境下的环境下的 C ESQL 编程规范编程规范 15 4 与数据库的相关问题与数据库的相关问题 16 4 1 索引的使用问题 16 4 2 查询变元的使用问题 17 4 2 1 操作符的使用 17 4 2 2 查询变元的使用 17 4 2 3 通配符的使用 18 4 3 更改时应注意的事项 18 4 4 数据库的高级应用问题 18 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 4 19 代码审查规范 5 多平台的移植问题 多平台的移植问题 ES 9000 AS400 19 5 1 数据库 19 5 2 字符编码问题 19 5 3 编程问题 20 6 其它其它 20 7 参考资料参考资料 20 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 5 19 代码审查规范 软件开发中心软件开发中心 C ESQL CICS 语言编程规范语言编程规范 1 C 语言编程规范语言编程规范 1 1 1 1 命名规范命名规范 原则 命名清晰 尽量体现出变量或函数的意义 作用范围和类型 保持一致 即前后的缩写保持一致 上下文关键字保持一致 整个程序使用的命名风 格一致 原则上 一般情况下变量应使用匈牙利命名法 1 1 1 变量命名变量命名 变量命名使用匈牙利命名法 前缀 大写名词 首字母大写 其它小写 cchar CHAR bBOOL byBYTE nint INT ddouble DOUBLE ffloat FLOAT lilong int LONG wWORD sishort int SHORT rRESULT vvoid szchar 以 0 终止的字符串 结构类型前缀全部字母小写的结构类型名 指针类型p 注 因不同系统对 int 的理解不同 C 语言程序整型变量定义时 不允许使用 int 型 而要用 short int 或 long int 对与变量的名称可以采用全称或意义明确的缩写 原则上变量名称不应该超过 20 个 当变量名称超长是可进行适当的缩减 若要强调某变量的做用域或类型时 可在变量前加注做用域标示 g 代表全局 变量 p 代表函数内局部变量 x 代表该变量为外部变量 e 代表 该变量须做为数组变量使用 局部变量可以使用简短的表示形式 对于十分明显的函数内的临时循环变量或作 用域不超过 15 行的临时变量使用 i j k n 等短变量名 对于已有代码 遵循该代码的变量命名风格 对于已有代码 遵循该代码的变量命名风格 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 6 19 代码审查规范 例如 cAmtInd表示字符型的金额标志 siPage表示短整形的页号 pcAmtInd表示字符型的金额标志指针 psiPage表示短整形的页号指针 cdmstruCurrent表示一个 CDM 结构类型的变量 pcdmstrCurrent表示一个 CDM 结构类型的变量指针 g siPage表示该变量为一个全局类型的短整形变量 使用时应特别加以注意 1 1 2 函数命名函数命名 函数命名建议采用如下命名方法 函数返回类型说明 动词 首字母大写 其它小写 名词 首字母大写 其它小写 注 在自定义的函数中 不允许出现有相同名称的函数 建议新编函数前先定义命名规 则 并且不要将同样的函数代码拷贝到不同的函数文件中 在主机ABIS开发的各 子系统在自定义子系统内部使用的函数名时 建议增加子系统前缀 建议采用 函数返回类型说明 子系统 动词 首字母大写 其它小写 名词 首字母大 写 其它小写 的命名方法 子系统不允许重名 函数名应尽量表达出函数的作用 各单词使用起始的大写字母分隔 对于已有代码 遵循该代码的函数命名风格 对于已有代码 遵循该代码的函数命名风格 例如 sGetPage sGetMaxPage 1 1 3 宏命名宏命名 宏一般分成两种类型 一种与函数类似的完成某种功能 可能带有参数的操作宏 这种宏命名方法可参考函数命名方法 只是字母全部大写 另外一种宏定义主要是对 一些常量的描述 其目的是把无意义的标示用有意义的宏来描述 增加程序的维护性 和可读性 通常是不带参数的宏 注 宏命名的时候要明确的无歧异的表明宏的含义 对于某些分类明确的宏定义 可 以在前面加上分类信息的描述 宏定义可以嵌套 注意对宏参数的 使用 如果需要使用宏参数的话 所有引用到宏参数的 地方必须都用括号引起来 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 7 19 代码审查规范 如 宏 MUL A B X A B 的写法是错误的 必须写为 MUL A B X A B 定义带参数宏时还应该注意宏名与参数表之间不能有空格 有空格就变成了不带 参数的宏定义 注意 的使用 对于描述性宏定义字符串不要以分号结束 否则分号也作为 字符串的一部分参加展开 宏定义可能产生副作用 不要给宏传入有副作用的参数 由于不同编译系统对宏的重定义处理方式不同 为避免出现不同系统间移植问 题 要求程序中定义的所有的宏命名必须唯一 例如 define MIN A B A 20 while sCount 60 对代码的注释应放在其上方相邻位置 不可放在下面 1 2 4 标注型注释标注型注释 对未完成的代码添加 TODO XXX 的注释 对发现了错误 但还未修改的代码添加 BUG XXX 的注释 1 3 1 3 头文件头文件 为了防止头文件被重复引用 应当用 ifndef define endif 结构产生预处理块 头文件中只存放 声明 而不存放 定义 不提倡使用全局变量 尽量不要在头文件中出现象 extern int value 这类声明 1 4 1 4 变量定义及初始化变量定义及初始化 重要变量定义时应采取一行定义一个并在其后加注说明的办法 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 9 19 代码审查规范 尽量在变量定义时就初始化 虽然 C 会初始化为缺省值 仅仅在需要根据计算结果决定初始化内容的情况下 不要在定义时初始变量 结构变量必须先声明结构 再声明变量 所有的字符串类型和结构类型都应该用 memset 函数进行初始化 而不能采用赋 值语句 如 memset szAccountName 0 sizeof pszAccountName 是正确的初始化方法 而 szAccountName 0 0 和 strcpy szAccountName 都是不正确的初始化方法 memset 函数的长度参数应使用 sizeof 函数 对于函数返回参数的初始化 建议将其初始化为错误返回 这样可以保证程序错 误不会扩大 注意当数组作为函数的参数进行传递时 该数组自动退化为同类型的指针 注意当数组作为函数的参数进行传递时 该数组自动退化为同类型的指针 例如 char szBuffer 256 数组定义 void vTestBufferSize char pszBuffer 函数声明 vTestBufferSize szBuffer memset szBuffer 0 sizeof szBuffer 注意注意 此时我们执行此句 memset 的原意是将 szBuffer 清空 但实际上此时对 szBuffer 做 sizeof 时 是对一个 char 指针类型求长度 其值将是指针长度其值将是指针长度 4 所 以 实际这条语句的作用仅仅是清空了 szBuffer 的头 4 个字节 1 5 1 5 表达式和语句表达式和语句 1 5 1 表达式表达式 表达式的编写的原则是简单 清晰 易懂 应注意以下方面 不允许使用一行多个语句的编码 如 x a b y c d 应改写为 x a b y c d 不能连续书写表达式 需要使用空格分隔表达式中的变量和符号 如 x a b 应改写为 x a b 拆分复杂表达式 如 x a x 2 b c 应改写为 if x 从左至右 类型 sizeof case 条件 2 break case 条件 3 break case 条件 4 break default break 注 switch 中 case 块内一般需要以 break 结束 如果需要连续处理需要加注释 case continue 或 case continue switch 必须有 default 处理 1 5 3 3 1 5 3 3 for for 语句语句 for 语句的书写形式为 for 注 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 12 19 代码审查规范 在 for 循环的结构体中 一般严禁对循环变量进行运算 否则容易导致循环失控 在多重循环中 如果有可能 应当将最长的循环放在最内层 最短的循环放在最 外层 以减少 CPU 跨切循环层的次数 如 for i 0 i 10 i for j 0 j 1000 j 的执行效率要比下面这种写法高 for i 0 i 1000 i for j 0 j 10 j 如果循环体内存在逻辑判断 并且循环次数很大 宜将逻辑判断移到循环体的外 面 如 if condition for i 0 i 1000 i doFuncA else for i 0 i 1000 i doFuncB 的执行效率要比下面这种写法高 for i 0 i szHelloStrin 的内存位于栈上 return szHelloString 将导致错误 因为当返回调用函数时 szHelloString 的内存空间已被释放 此时引用 szHelloString 极其危险 对于文件指针或其他系统资源操作 应在程序的任何异常出口时关闭已打开文件 指针或系统资源 1 7 1 7 编译和链接编译和链接 建议不要关闭任何编译告警 发布版本消除所有告警 一定要清楚使用的优化选项 和检查发布版本中优化后的变化 不要使用自己不熟悉 的优化选项 在编写库函数archive库时 要注意引用顺序 仅允许逐层嵌套 如 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 16 19 代码审查规范 在lib000 a中有某函数使用一外部函数 其执行代码在lib001 a中 而在lib001 a中的函数 有使用一外部函数的执行代码在lib002 a中 则要求在lib002 a不的有需要外部函数代码 位于lib000 a或lib001 a中 在ld参数中 使用按照链接顺序组织好的参数如下 l 000 l 001 l 002 1 8 1 8 调试调试 在调试版本中尽可能的多使用断言 建议在函数的入口处检查传入参数的合法性和在函 数的退出点检查逻辑关系 断言不等于异常处理 一定要注意有无处理异常 建议在发布版本中 包括调试版本 使用运行日志 记录运行情况和处理过的重大异 常 尤其是在遇到不可恢复的异常 在调试版本中尽可能的使用跟踪调试代码 跟踪加载逻辑分支 整个程序中使用统一的断言形式和跟踪形式 检查发布版本中是否还存在调试和跟踪代码 2 普通环境下的普通环境下的 C ESQL 编程规范编程规范 2 1 2 1 头文件头文件 在交易程序中包含头文件 而在函数中不允许使用头文件 在所有程序中 使用头文件 sqlca h 必须在主函数体外 2 2 2 2 数组变量的定义数组变量的定义 当宿主变量为字符串变量时 其长度定义为比其对应的数据库字段长度至少大 1 2 3 2 3 SQLSQL 语句的编写规范语句的编写规范 编写 TSQL 语句时必须严格按照下列顺序书写 SELECT 字段名 INTO 数组变量名 FROM 表名 WHERE 条件 GROUP BY ORDER BY 或 UPDATE 表名 SET WHERE 条件 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 17 19 代码审查规范 或 INSERT INTO 表名 VALUES 或 DELETE FROM 表名 WHERE 条件 在 SQL 语句的后面必须对 SQL 返回码进行判断 并且根据程序的要求对 DB ERROR DB SUCC DB NULL DB DKEY 要有相应的处理 3 CICS 环境下的环境下的 C ESQL 编程规范编程规范 3 1 3 1 头文件头文件 在交易程序中包含头文件 而在函数中不允许使用头文件 在所有程序中 使用头文件 sqlca h 必须在主函数体外 3 2 3 2 注意事项注意事项 由于 CICS 是一个基于线程的事务管理系统 因此在编程是必须有一些相关的需要特 别注意的地方 调用 CICS 命令前必须先使用 ADDRESS EIB 命令 引用 CICS API 后必须检查 RESP C 语言中的非线程安全函数不能使用 如 程序出口控制命令 exit 进程控制命令 fork system 等 内存管理命令 allocate 等 这些函数一般 CICS 都提供对应的 CICS 函数 如 exit 的对应 CICS API 为 CICS RETURN allocate 的 CICS API 为 GETMAIN 等 慎用下面的函数 终端 I O 命令 printf 等 文件操作命令 fopen fclose read write 等 网络操作命令 connect close 等 C 的 pirntf 函数一般将标准输出丢弃 将标准错误输出重定向到了 CICS 的 console 文件中 一般由于该文件只由超级用户或 CICS 用户才有权限读取 所以对普 通用户来说是没什么用的 对于文件操作和网络操作命令 必须要保证对应的 open 必须有相应的 close 对应 否则由于 CICS 不会自己关闭这些句柄 长时间后将导致这些资源被耗尽 在 CICS 程序中严禁修改数据库的隔离集级别和嵌套方式 因为该修改在这个 AS 的整个生存周期内都将有效 有可能对其后运行的其它程序造成严重影响 SET ISOLATION SET CHAINED SET ROWCOUNT 软件开发中心编程规范 V1 3 1 总行软件开发中心质量管理部 18 19 代码审查规范 ABIS 的所有 CICS 程序内 不得使用数据库的事务管理命令 如 SQL COMMIT SQL ROLLBACK 等 事务管理操作统一由 ABIS 的 SC 程序完成 其它 CICS 程序中 使用 SQL COMMIT SQL ROLLBACK 命令时必须慎重 确 保整个交易的完整性和一致性 在 CICS 里 交易取名不得以字母 C 开头 程序取名不得以 DFH 开头 4 多平台的移植问题 多平台的移植问题 ES 9000 4 1 4 1 数据库数据库 由于 DB2 数据库没有 SET CONNECTION 命令 因此在需要连接数据库时必须 判断平台是否是 DB2 只有非 DB2 的数据库才使用此命令 strcpy DB CONNECT CONNECT SD if PLATFORM 3 EXEC SQL SET CONNECTION CONNECT SD 其中 PLATFORM 的定义为 1 ES 9000 2 AS 400 3 UNIX DB2 数据库中不使用游标的 deallocate 命令 游标资源在程序结束后统一释放 DB2 数据库中索引项必须与 SELECT 语句的条件一致 否则索引将不起作用 开 发人员在数据库设计和程序开发时必须统一考虑索引事宜 4 2 4 2 字符编码问题字符编码问题 IBM 系列机器多为 EBCDIC 码制 如 ES 9000 和 AS 400 等 而客户端设备一般为 ASCII 码制 如 INTEL 芯片 PC 机 RS 6000 等 当客户端请求服务器提供交易服务时 相应的应用数据必须进行码制转换 同时还要对汉字串添加前后导符 0X0E 0X0F 为此 确定以下关于码制转换的原则 码制转换工作都在客户端完成 即不论客户端处于数据发送还是接受状态 都由 客户端对发送或接受的数据进行码制转换 服务器端程序设计时不考虑码制转换 问题 也不考虑汉字转换问题 为简化码制转换程序设计的复杂度 客户端和服务器之间交换数据时 发送方程 序将各类型数据域转换成定长字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信贷风险评估模型-洞察阐释
- 3D交互在增强现实中的应用-洞察阐释
- 软件工程培养计划
- 旗袍行业财务计划
- 温州平阳县中小学教师招聘笔试真题2024
- 河南郑州惠科光电有限公司招聘笔试真题2024
- 关于学前教育论文
- 燕京理工学院《钢琴与伴奏》2023-2024学年第二学期期末试卷
- 哈尔滨远东理工学院《基础俄语三》2023-2024学年第二学期期末试卷
- 天津城市职业学院《柬埔寨语写作》2023-2024学年第二学期期末试卷
- 2025第二季度思想汇报范文
- 《大数据技术对社会发展的影响研究》5200字(论文)
- 一例前交通动脉瘤破裂伴蛛网膜下腔出血的护理查房
- 2024-2030年中国风电运维行业发展现状规划分析报告
- 2025年中考语文专题复习:写作技巧 课件
- 护理漏执行医嘱不良事件
- 2024年重庆市九龙坡区某中学小升初数学试卷(含答案)
- 医院培训课件:《医疗废物分类及管理》
- 2023年天津中考历史试卷
- 改革开放简史(北方工业大学)知到智慧树章节答案
- 制造企业生产记录档案管理制度
评论
0/150
提交评论