C语言编程规范

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定义函数体的左右大括号要各自独占一行。
注释与前面的执行语句之间空一行。
例子详见 rpt255.cp、sp6787.c
4、 Tab 键缩进
利用缩进来显示程序的逻辑结构,缩进量一致并以 Tab 键为单位,定义 Tab 键为 8 个空格. 在 UE 中修改 Tab 键宽度:高级—配置—编辑—将制表符宽度和缩进空格都 设为 8,这样代码用 UE 打开和用 vi 打开的视觉效果就一致了。 例子详见 rpt255.cp、sp6787.c
1、acct
帐务核心处理部分
2、agent
中间业务公函
3、ass
考核公函
4、base
基本函数(日期,字符,金额等处理)
5、beps
小额
6、card

7、cif
客户
8、com
凭证和现金
9、comm
通讯
10、de
存取款
11、eod
百度文库
日终
12、ln
贷款
13、mbfe
大额
14、od
透支
15、pubdb
数据库操作
g_pub_tx.tx_date 结构体变量:
struct ln_mst_hst_c sLn_mst_hst; 或 struct ln_mst_hst_c s_ln_mst_hst;
6、 程序结构清晰
程序结构清析,简单易懂,单个函数的程序行数不得超过 100 行。 一行只写一条语句,不允许把多个短语句写在一行中。 循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分;划分 的原则:整齐、美观、符合其他编码规范。 太长的程序分成若干个函数实现。 例子详见 rpt255.cp、sp6787.c
学习参考别人的代码,不要有用的没用的完全照搬。
使用括号以避免二义性。 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默 认的优先级。
3、 尽量使用标准库函数和公共函数。
公共函数都是将常用的复杂功能封装测试好的函数,使用公共函数可以提高
编程效率与质量,减少出错率。
公共函数所在目录:src/pubf
*
* 修改记录:
* 日 期: 2003 年 4 月 25 日
* 修 改 人: jane
* 修改内容: 此交易只允许上级机构查询下级机构,不能垮管理查询,
*
网点间不能互查,同一网点柜员间可以互查;
*************************************************/
函数头说明范例:
:无校验的账号
*
int mode : 帐号介质(1 客户帐号 2 内部帐号 3 卡帐号 4 客户号)
*
chkb_len : 校验位的长度
*
* 输出: chkb_acno : 带校验位的帐号
*
* 返 回 值: 0 成功,1 失败
*
* 修改历史:
*
********************************************************************/
* 函 数 名: pub_base_GetDate
* 函数功能: 取得系统日期
* 作 者:
* 完成时间: 2003 年 12 月 16 日
*
* 参 数:
* 输 入:无
*
* 输 出:year: 年
*
month: 月
*
day: 日
*
* 返回值:无
*
* 修改历史:
*
********************************************************************/
/**********************************************************************
* 函数名: pub_base_CrtAcChkb
* 函数功能: 生成账号校验位
* 作者/时间: xxx 2003 年 12 月 16 日
*
* 参数:
* 输入: acno
要编号
匈牙利命名法是一名匈牙利程序员发明的,而且他在微软工作了多年。此命 名法就是通过微软的各种产品和文档传出来的。多数有经验的程序员,不管他们 用的是哪门儿语言,都或多或少在使用它
这种命名法的基本原则是: 变量名=属性+类型+对象描述 即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、 用途,而且便于记忆。
if (ret >= 0)
tmpje = g_dd_mst.ctl_amt + g_dd_mst.hold_amt +
5、 变量命名
一些共性规则: – 直观并且可以拼读,可望文知意,不必“解码”。 – 名字的长度:min-length && max-information 原则 – 与操作系统和开发工具的风格保持一致 – 程序中不要出现仅靠大小写区分的相似的标识符 – 程序中不要出现标识符完全相同的局部变量和全局变量 – 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等 – 尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的确需
memset(&sGl_sub, 0x00, sizeof(struct gl_sub_c)); memset(&s_com_item,0x00,sizeof(struct com_item_c)); ret = Com_item_Sel( g_pub_tx.reply, &s_com_item, "acc_hrt='%s'", s_gl_sub.acc_hrt ); pub_base_strpack( s_com_item.acc_no );
函数功能: 比较两个 DOUBLE 型数据大小
输入参数: amt1: 第一个 DOUBLE 型数据
amt2: 第二个 DOUBLE 型数据
输 出:

返回值:
0 相等
1 第一个大于第二个
-1 第一个小于第二个
例如:
ret = pub_base_CompDblVal(g_dd_mst.hold_amt, g_dd_parm.min_bal);
6、 变量在可见范围内必须初始化
变量使用前一定要初始化,刚分配的内存空间,或者是被你用过的内存空间 里面的数据是不固定的。为了避免这些无用的数据给自己的程序带来影响,要在 可见范围内进行初始化,一般情况下是置 0。
①整型、浮点型等在定义时直接赋初值, int lst_days=0; double amt=0.00;
if( strlen(s_com_item.acc_no)==7 ) {
continue; }else{
ret=Gl_sub_Sel( g_pub_tx.reply , &sGl_sub , "br_no='%s' and cur_no='01' and acc_hrt like '%s%%' \
and (rdd_amt<>0 or rcd_amt<>0 or dr_bal<>0 or cr_bal<>0 or ldd_bal<>0 or lcd_bal<>0)" ,s_gl_sub.br_no, s_com_item.acc_no);
基本要求
1、 函数声明
一定要显示声明函数的返回值类型。 如果函数不需要返回值,要声明为 void 类型。 返回类型为 double 型的函数必须声明.
返回类型为指针的函数要求必须声明。 函数的声明要与函数定义一致(包括函数的类型及参数的类型、个数、顺序)
2、 代码清晰
打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
void pub_base_GetDate(int *year, int *month, int *day) {
time_t t; struct tm *local_time;
t = time(0); local_time = localtime(&t);
*year = 1900 + local_time->tm_year; *month = local_time->tm_mon+1; *day = local_time->tm_mday;
②指针赋为 NULL FILE *fp; fp=NULL; 要时刻注意指针的指向。
③结构体、数组、字符串用 memset 初始化,以免出现乱码 memset(&s_com_sys_parm, 0x00, sizeof(struct com_sys_parm_c)); memset(whlst, 0x0, sizeof(whlst)); 字符数组的定义和初始化要考虑‘\0’。
!pub_base_CompDblVal(s_gl_sub.cr_bal,0.00) && !pub_base_CompDblVal(s_gl_sub.ldd_bal,0.00) && !pub_base_CompDblVal(s_gl_sub.lcd_bal,0.00) && !pub_base_CompDblVal(s_gl_sub.rdd_amt,0.00) && !pub_base_CompDblVal(s_gl_sub.rcd_amt,0.00) ) {
可读性要求
C 语言编程规范
1、 说明
每个源程序文件,都有文件头说明
每个函数,都有函数头说明
文件头说明范例:
/*************************************************
* 文 件 名: sp8302.c
* 功能描述: 柜员凭证查询
*
* 作 者: jane
* 完成日期: 2003 年 4 月 12 日
7、 比较
1.用“==”比较变量和常数是否相等时,把常数写在左边,以防止把“==” 写成“=”。
例如: if(1==i) {
…….. } 2.需要用浮点数比较的时候,不要通过等号“==”和不等号“!=”来进行比 较。用公共函数 pub_base_CompDblVal 比较。
函 数 名: pub_base_CompDblVal
做好事要留名,注意备份 修改程序必须注明的要素:谁何时因何种原因修改那部分的代码,并且注意 备份修改之前的程序
2、 注释
尽量使用/* 注释内容 */ 格式,不要使用//格式 保持注释与代码完全一致。 对单行代码的注释可以在代码的上方和代码的后面; 对多行代码的注释应该放在代码的上方;
例 1. int head_flag = 0 ;/***added bye liuyue 20061129 在处理 6*科目的时候因为有的支行该类科 目都为 0,导致了打印时候不打表头的情况***/ 例 2. /* 打印下级科目有金额的上级科目 added by martin 20061104*/ if( !pub_base_CompDblVal(s_gl_sub.dr_bal,0.00) &&
下边是一些推荐使用的规则例子,你可以挑选使用,也可以根据个人喜好作 些修改再用之。
⑴属性部分: 全局变量: g_ 常量 : c_
⑵类型部分: 指针: p 布尔型: b 浮点型: f 无符号: u ⑶描述部分: 初始化: Init 临时变量: Tmp 目的对象: Dst 源对象: Src
下边举例说明: 全局变量: g_ 开头 例如:g_pub_tx.reply
return ; }
3、 空行
空行和空白字符也是一种特殊注释
在两个函数定义之间必须使用空行分开。
在函数定义中,用空行将代码按逻辑片断划分。 例如两个并列的判断语句之间就可以用空行来区分;变量的定义、变量的初 始化以及真正的处理语句之间就可以用空行来区分。
类别不一致的宏定义之间、全局变量之间、函数声明之间需要添加空行。
16、pubdb_m
数据库特殊操作
17、rept、rpt
报表
18、sttl
资金
公共函数的命名规律:目录_功能
如:pub_base_ac_prdt()所在目录为 src/pubf/base
4、 头文件
为了减少执行程序的大小,不应包含不需要的头文件。
5、 变量定义
不要随意定义全局变量,尽量使用局部变量。 少用全局变量,如果是程序级全局变量,定义在主文件中,其他文件用 extern 显式声明。 文件级全局变量,一定要用 static 声明。 不要在程序中间声明变量。 例子详见 rpt255.cp、sp6787.c
if( ret==100 ) {
continue; } } }
主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。 常量定义(DEFINE)有相应说明。 处理过程的每个阶段都有相关注释说明。
在典型算法前都有注释。
例 3.
/**********************************************************************
相关文档
最新文档