MTK编程规范试行.docx

上传人:b****1 文档编号:2375541 上传时间:2022-10-29 格式:DOCX 页数:39 大小:41.85KB
下载 相关 举报
MTK编程规范试行.docx_第1页
第1页 / 共39页
MTK编程规范试行.docx_第2页
第2页 / 共39页
MTK编程规范试行.docx_第3页
第3页 / 共39页
MTK编程规范试行.docx_第4页
第4页 / 共39页
MTK编程规范试行.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

MTK编程规范试行.docx

《MTK编程规范试行.docx》由会员分享,可在线阅读,更多相关《MTK编程规范试行.docx(39页珍藏版)》请在冰豆网上搜索。

MTK编程规范试行.docx

MTK编程规范试行

MTK编程规范

目录

目录2

第1章命名规则4

1.1共性规则4

1.2我公司的MTK开发命名规则7

1.3注释8

第2章应用程序的目录结构9

第3章Lib库规范10

3.1开放给客户使用的部分10

3.2不允许开放的部分10

第4章文件结构11

4.1版本和版权的声明11

3.2头文件的结构12

3.3定义文件的结构13

3.4函数的说明14

第5章程序的排版15

第6章表达式和基本语句18

6.1运算符18

6.2复合表达式19

6.3条件语句20

6.4循环语句21

第6章函数21

6.1函数的参数22

6.2函数的返回值22

6.3函数编写的一般性规则23

第7章内存管理25

第8章可测性25

第9章程序的效率26

第10章审查及测试28

附录A:

C代码审查表28

附录B:

ASCII完整码表32

附录C:

MTK重定义的数据类型33

第1章命名规则

比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。

例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。

如果一个变量由ppch开头,则表明它是指向字符指针的指针。

“匈牙利”法最大的缺点是烦琐,例如

inti,j,k;

floatx,y,z;

倘若采用“匈牙利”命名规则,则应当写成

intiI,iJ,ik;//前缀i表示int类型

floatfX,fY,fZ;//前缀f表示float类型

如此烦琐的程序会让绝大多数程序员无法忍受。

没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。

我们不要化太多精力试图发明世界上最好的命名规则,本章制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。

1.1共性规则

首先我们来看一下这样一组命名KHDL,KHXL,GDLB,CZLB,CXLB,GYLB,你能知道他的意思么?

他们分别代表:

客户大类,客户小类,股东类别,操作类别,查询类别,柜员类别。

这是一个知名的软件公司在几年前的一个证券柜台系统的命名。

正因为这样他们招进新的程序员,不得不用大量的时间对他们进行培训,即使经过一个月的培训以后也没有人能全记住这些难懂的名词,不得不花大量的时间去查数据字典。

这个公司最后花了大量的人力物力,用了将近一年时间改进这套命名系统。

所以我们介绍的第一条规则就是:

【规则1-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。

标识符采用英文单词或其组合,便于记忆和阅读。

切忌使用汉语拼音来命名。

如果单词不会写,请打开“金山词霸”,或者打开google中文翻译。

程序中的英文单词一般不会太复杂,用词应当准确。

例如不要为了省几个字符把CurrentValue写成NowValue。

【规则1-1-2】在MTK平台中编程,我们采用英文首字母大写的方式来分隔单词,用下划线来分隔前缀。

命名的方式有多种,常用的有英文首字线大写方式,如AddUser;英文单词全部小写,用下划线划分单词,如add_user,这两种方式。

MTK本身不同的程序也采用了这两种方式,这两种方式都是可以的。

但是为了公司内部的统一,我们采用英文首字母大写的方式来强制统一(变量等第一个单词的首字母可以不大写)。

【规则1-1-3】标识符的长度应当符合“minlength&&maxinformation”原则。

一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。

那么名字是否越长约好?

不见得!

例如变量名MaxVal就比MaxValueUntilOverflow好用。

单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。

【规则1-1-4】标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。

新启用一个缩写,必须进行必要的注释说明。

较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。

示例:

如下单词的缩写能够被大家基本认可。

temp可缩写为tmp;flag可缩写为flg;statistic可缩写为stat;

increment可缩写为inc;message可缩写为msg;result可缩写为ret;

value可缩写为val;

【规则1-1-5】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

下面是一些在软件中常用的反义词组。

add/remove;begin/end;create/destroy;insert/delete;first/last;

get/release;increment/decrement;set/get;add/delete;lock/unlock;

open/close;min/max;old/new;start/stop;next/previous;source/target;

show/hide;send/receive;source/destination;cut/paste;up/down

【规则1-1-6】除非是数字运算,程序中不允许出现数字标识符。

在以往调程序调试过程中,我们要花费大量的时间去理解程序中数字的意义,因此以下写法是错误的。

switch(OperationType)

{

case0:

//ivr

DoSomething();

break;

case1:

//sms

DoOtherthing();

break;

case2:

//wap

…..

break;

default:

break;

}

以上代码加入注释本身是没有什么错的,但现实中发现,如果另外的程序员接手这段代码,扩展这段代码,需要一定的时间。

因为他在写其它程序的类似处理的时候,他的0代表sms,1代表IVR。

程序中如果处理出现错误,同样我们也需要大量的时间来纠错。

正确的写法如下:

#defineOPERATION_TYPE_IVR0

#defineOPERATION_TYPE_SMS1

#defineOPERATION_TYPE_WAP2

……

switch(OperationType)

{

caseOPERATION_TYPE_IVR:

DoSomething();

break;

caseOPERATION_TYPE_SMS:

DoOtherthing();

break;

caseOPERATION_TYPE_WAP:

…..

break;

default:

break;

}

这样,就不用去理解0,1,2的意思了。

MTK本身的代码这一部分还是做得挺好的。

【规则1-1-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。

比如说我们优化、改进、扩展了MTK的函数,我们就会加上公司名字的前缀。

同样一些比较常用的函数,比如说字符编码的转换函数,为了避免跟其它第三方软件的函数冲突,我们也需要加上公司前缀。

【规则1-1-8】全局变量使用g_前缀,静态变量使用s_前缀。

1.2我公司的MTK开发命名规则

【规则1-2-1】公司前缀只允许以下两种形式:

Worthful_或者WT_。

公司名缩写出再过WF,YSCF这样的名称,在此废除。

【规则1-2-2】应用的目录名为首字母大写的目录名,头文件放在应用名+Inc的目录下,源文件放在应用名+Src的目录下。

如应用百事通,取名KnowAll,头文件放在KnowAllInc下面,源文件放在KnowAllSrc下面。

【规则1-2-3】应用宏开关用双下划线开始,双下划线结束。

如:

__KNOW_ALL__;

【规则1-2-4】防重复引用,放在文件头的宏,使用双下划线开始,如果头文件以“_H”结束,如果是源文件使用”_C”结束。

如:

#ifndef__KNOW_ALL_H,#ifndef__KNOW_ALL_C

【规则1-2-5】应用内的常量,宏全用大写的字母,用下划线分割单词。

如constintWT_SMS_SEND_NUMBER3

WT_SMS_NUMBER,WT_SMS_CM_INFO,WT_SMS_CU_INFO;

【规则1-2-6】定义枚举用ENUM_当前缀的大写字母,用下划线分割单词。

枚举名用_ENUM为后缀,

如:

typedefenum

{

ENUM_EBR_FONT_SIZE_SMALL=0,

ENUM_EBR_FONT_SIZE_MEDIUM,

ENUM_EBR_FONT_SIZE_LARGE

}EBR_FONT_SIZE_ENUM;

【规则1-2-7】定义结构名用_STRU或_STRUCT为后缀,

如:

typedefstruct

{

S8file_name[(FMGR_MAX_FILE_LEN+1)*ENCODING_LENGTH];

S8file_ext[(FMGR_MAX_EXT_LEN+1)*ENCODING_LENGTH];

FMGR_FILTERfile_type;

U32file_size;

U16index;

MYTIMEtime;

U8attribute;

BOOLis_used;

BOOLis_short;

BOOLis_able_display;

}FMGR_FILE_INFO_STRU;

【规则1-2-8】定义变量,不要同时使用U8,unsignedchar两套定义。

MTK本身定义了一套变量类型,我们要么使用MTK的,要么使用C本身的变量类型,不要两套混用。

【规则1-2-9】变量和参数用小写字母开头的单词组合而成。

变量和参数的名字应当使用“名词”或者“形容词+名词”。

如tmpValue,oldValue,currValue;

【规则1-2-10】函数名用大写字母开头的单词组合而成,应当使用“动词”或者“动词+名词”(动宾词组)。

如GetField,SetField,InitData。

1.3注释

不要把程序和注释看作两个部分,注释是程序的一部分。

一般注释能达到程序量的20%或以上。

【规则1-3-1】通过对函数、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的,合理减少注释量。

AddUser();/*添加用户*/

以上注释显得多余。

注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

【规则1-3-2】全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

示例:

/*TheErrorCodewhenSCCPtranslateGlobalTitlefailure,asfollows*///变量作用、含义

/*0-SUCCESS1-GTTableerror2-GTerrorOthers-nouse*///变量取值范围

/*onlyfunctionSCCPTranslate()inthis

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1