当前位置:文档之家› C语言编程规范

C语言编程规范

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 );
!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) ) {
/**********************************************************************
* 函数名: pub_base_CrtAcChkb
* 函数功能: 生成账号校验位
* 作者/时间: xxx 2003 年 12 月 16 日
*
* 参数:
* 输入: acno
7、 比较
1.用“==”比较变量和常数是否相等时,把常数写在左边,以防止把“==” 写成“=”。
例如: if(1==i) {
…….. } 2.需要用浮点数比较的时候,不要通过等号“==”和不等号“!=”来进行比 较。用公共函数 pub_base_CompDblVal 比较。
函 数 名: pub_base_CompDblVal
6、 变量在可见范围内必须初始化
变量使用前一定要初始化,刚分配的内存空间,或者是被你用过的内存空间 里面的数据是不固定的。为了避免这些无用的数据给自己的程序带来影响,要在 可见范围内进行初始化,一般情况下是置 0。
①整型、浮点型等在定义时直接赋初值, int lst_days=0; double amt=0.00;
16、pubdb_m
数据库特殊操作
17、rept、rpt
报表
18、sttl
资金
公共函数的命名规律:目录_功能
如:pub_base_ac_prdt()所在目录为 src/pubf/base
4、 头文件
为了减少执行程序的大小,不应包含不需要的头文件。
5、 变量定义
不要随意定义全局变量,尽量使用局部变量。 少用全局变量,如果是程序级全局变量,定义在主文件中,其他文件用 extern 显式声明。 文件级全局变量,一定要用 static 声明。 不要在程序中间声明变量。 例子详见 rpt255.cp、sp6787.c
定义函数体的左右大括号要各自独占一行。
注释与前面的执行语句之间空一行。
例子详见 rpt255.cp、sp6787.c
4、 Tab 键缩进
利用缩进来显示程序的逻辑结构,缩进量一致并以 Tab 键为单位,定义 Tab 键为 8 个空格. 在 UE 中修改 Tab 键宽度:高级—配置—编辑—将制表符宽度和缩进空格都 设为 8,这样代码用 UE 打开和用 vi 打开的视觉效果就一致了。 例子详见 rpt255.cp、sp6787.c
函数功能: 比较两个 DOUBLE 型数据大小
输入参数: amt1: 第一个 DOUBLE 型数据
amt2: 第二个 DOUBLE 型数据
输 出:

返回值:
0 相等
1 第一个大于第二个
-1 第一个小于第二个
例如:
ret = pub_base_CompDblVal(g_dd_mst.hold_amt, g_dd_parm.min_bal);
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);
*
* 修改记录:
* 日 期: 2003 年 4 月 25 日
* 修 改 人: jane
* 修改内容: 此交易只允许上级机构查询下级机构,不能垮管理查询,
*
网点间不能互查,同一网点柜员间可以互查;
*************************************************/
函数头说明范例:
re也是一种特殊注释
在两个函数定义之间必须使用空行分开。
在函数定义中,用空行将代码按逻辑片断划分。 例如两个并列的判断语句之间就可以用空行来区分;变量的定义、变量的初 始化以及真正的处理语句之间就可以用空行来区分。
类别不一致的宏定义之间、全局变量之间、函数声明之间需要添加空行。
if( ret==100 ) {
continue; } } }
主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。 常量定义(DEFINE)有相应说明。 处理过程的每个阶段都有相关注释说明。
在典型算法前都有注释。
例 3.
/**********************************************************************
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
做好事要留名,注意备份 修改程序必须注明的要素:谁何时因何种原因修改那部分的代码,并且注意 备份修改之前的程序
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) &&
学习参考别人的代码,不要有用的没用的完全照搬。
使用括号以避免二义性。 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默 认的优先级。
3、 尽量使用标准库函数和公共函数。
公共函数都是将常用的复杂功能封装测试好的函数,使用公共函数可以提高
编程效率与质量,减少出错率。
公共函数所在目录:src/pubf
要编号
匈牙利命名法是一名匈牙利程序员发明的,而且他在微软工作了多年。此命 名法就是通过微软的各种产品和文档传出来的。多数有经验的程序员,不管他们 用的是哪门儿语言,都或多或少在使用它
这种命名法的基本原则是: 变量名=属性+类型+对象描述 即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、 用途,而且便于记忆。
②指针赋为 NULL FILE *fp; fp=NULL; 要时刻注意指针的指向。
③结构体、数组、字符串用 memset 初始化,以免出现乱码 memset(&s_com_sys_parm, 0x00, sizeof(struct com_sys_parm_c)); memset(whlst, 0x0, sizeof(whlst)); 字符数组的定义和初始化要考虑‘\0’。
可读性要求
C 语言编程规范
1、 说明
每个源程序文件,都有文件头说明
每个函数,都有函数头说明
文件头说明范例:
/*************************************************
* 文 件 名: sp8302.c
* 功能描述: 柜员凭证查询
*
* 作 者: jane
* 完成日期: 2003 年 4 月 12 日
* 函 数 名: pub_base_GetDate
* 函数功能: 取得系统日期
* 作 者:
* 完成时间: 2003 年 12 月 16 日
*
* 参 数:
* 输 入:无
*
* 输 出:year: 年
*
month: 月
*
day: 日
*
* 返回值:无
*
* 修改历史:
*
********************************************************************/
相关主题