




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
011实验室VC+编程规范(试行)1 范围本规范适合于使用VC+6.0或VC+7.0编写的Windows应用程序。2 参考文献VC编程规范3 程序风格1. 严格采用阶梯层次组织程序代码各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。2. 提示信息字符串的位置在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。3. 对变量的定义,尽量位于函数的开始位置。4 命名规则4.1 变量名的命名规则(1) 变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。即: 变量名=变量类型+变量的英文意思(或缩写)对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。常见变量命名规则见下表:bool(BOOL) 用b开头 bIsParentbyte(BYTE) 用by开头 byFlagshort(int) 用n开头 nStepCountlong(LONG) 用l开头 lSumchar(CHAR) 用c开头 cCount float(FLOAT) 用f开头 fAvgdouble(DOUBLE) 用d开头 dDetavoid(VOID) 用v开头 vVariantunsigned int(WORD)用w开头wCountunsigned long(DWORD)用dw开头dwBroadHANDLE(HINSTANCE)用h开头hHandleDWORD用dw开头dwWordLPCSTR(LPCTSTR)用str开头strString用0结尾的字符串 用sz开头 szFileName对于控件变量采用控件名缩写+变量名的方式,以下是常用控件的缩写button用btn开头btnOkList boxl 用lst开头 lstParentEdit box 用edt开头 edtFlagStatic text 用stc开头 stcCountCombo box 用cob开头cobSumScroll bar 用scr开头 scrCount Spin 用spn开头 spnAvgProgress 用prg开头 prgDetaList Control 用lic开头 licVariantTree Control用trc开头trcCountTab Control用tab开头tabBroadAnimate用ani开头aniHandleRich Edit用redt开头redtWord在以上控件上作的扩展,可以在控件缩写前加上x作为扩展标示。如:xlstParent。对未给出的变量类型要求提出并给出命名建议给技术委员会。(2) 指针变量命名的基本原则为:对一重指针变量的基本原则为:“p”+变量类型前缀+命名如一个float*型应该表示为pfStat对多重指针变量的基本规则为:二重指针: “pp”+变量类型前缀+命名三重指针: “ppp”+变量类型前缀+命名.(3) 全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写)(4) 静态变量用s_开头,如一个静态的指针变量定义为s_plPervInst,即: 变量名=s_+变量类型+变量的英文意思(或缩写)(5) 成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写)(6) 对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。如:enum cmEMDAYSEMDAYS_MONDAY;EMDAYS_TUESDAY;(7) 对struct、union、class变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。结构一般用S开头如:struct ScmNPointint nX;/点的X位置int nY; /点的Y位置;联合体一般用U开头如: union UcmLPointlong lX;long lY;类一般用C开头如:class CcmFPointpublic:float fPoint; 对一般的结构应该定义为类模板,为以后的扩展性考虑如:template class CcmTVector3dpublic: TYPE x,y,z;(8) 对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示类别。(9) 对const 的变量要求在变量的命名规则前加入c_,即:c_+变量命名规则;例如:const char* c_szFileName;(10) 临时变量的命名在函数体的内部,程序员常常用变量记录临时信息,该类变量采用t_+类型+英文缩写的命名方法,例如:t_bIsDelete。4.2 函数的命名规范函数的命名应该尽量用英文表达出函数完成的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。例如:long cmGetDeviceCount();4.3 函数参数规范、参数名称的命名参照变量命名规范。、为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,采用指针或引用方式传递。、为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。如:cmCopyString(const char * c_szSource, char * szDest)4.4 引出函数规范对于从动态库引出作为二次开发函数公开的函数,为了能与其他函数以及Windows的函数区分,采用类别前缀+基本命名规则的方法命名。例如:在对动态库中引出的一个图象编辑的函数定义为 imgFunctionname(其中img为image缩写)。现给出三种库的命名前缀:、对通用函数库,采用cm为前缀。、对三维函数库,采用vr为前缀。、对图象函数库,采用img为前缀。对宏定义,结果代码用同样的前缀。4.5 文件名的命名规范(包括动态库、组件、控件、工程文件等)文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用象file1,myfile之类的文件名。5 注释规范:5.1 函数头的注释对于函数,应该在函数的声明处说明如下信息: “功能”,“参数”,“返回值”、“主要思路”、“调用方法”、“日期”举例如下:/程序说明开始/=/ 功能: 从一个String 中删除另一个String。/参数: strByDelete,strToDelete/(入口) strByDelete: 被删除的字符串(原来的字符串)/(出口) strToDelete: 要从上个字符串中删除的字符串。/返回: 找到并删除返回1,否则返回0。(对返回值有错误编码的要/求列出错误编码)。/主要思路:本算法主要采用循环比较的方法来从strByDelete中找到/ 与strToDelete相匹配的字符串,对多匹配strByDelete/ 中有多个strToDelete子串)的情况没有处理。请参阅:/ 书名./调用方法:./日期:起始日期,如:2000/8/21.9:40-2000/8/23.21:45/=/函数名()/程序说明结束、对于某些函数,其部分参数为传入值,而部分参数为传出值,所以对参数要详细说明该参数是入口参数,还是出口参数,对于某些意义不明确的参数还要做详细说明(例如:以角度作为参数时,要说明该角度参数是以弧度(PI),还是以度为单位),对既是入口又是出口的变量应该在入口和出口处同时标明。等等。、函数的注释应该放置在函数的头文件中、在注释中应该详细说明函数的主要实现思路、特别要注明自己的一些想法,如果有必要则应该写明对想法产生的来由。对一些模仿的函数应该注释上函数的出处。、在注释中详细注明函数的适当调用方法,对于返回值的处理方法等。在注释中要强调调用时的危险方面,可能出错的地方。、对日期的注释要求记录从开始写函数到结束函数的测试之间的日期。、对函数注释开始到函数命名之间应该有一组用来标识的特殊字符串。如果算法比较复杂,或算法中的变量定义与位置有关,则要求对变量的定义进行图解。对难以理解的算法能图解尽量图解。在生成MFC框架时产生的函数和消息映射函数(用户消息除外)可以不用注释,但对于人为添加的函数(包括使用ClassWizard生成的函数)都应该添加注释。5.2 2、变量的注释对于变量的注释紧跟在变量的后面说明变量的作用。原则上对于每个变量应该注释,但对于意义非常明显的变量,如:i,j等循环变量可以不注释。例如: long lLineCount /线的根数。5.3 3、文件的注释文件应该在文件开头加入以下注释:/ 工程: 文件所在的项目名。/ 作者:*,修改者:*/ 描述:说明文件的功能。/ 主要函数:/ 版本:说明文件的版本,完成日期。/ 修改:说明对文件的修改内容、修改原因以及修改日期。/ 参考文献: ./为了头文件被重复包含要求对头文件进行定义如下:#ifndef _FILENAME_H_#define _FILENAME_H_其中FILENAME为头文件的名字。5.4 4、其他注释在函数内我们不需要注释每一行语句。但必须在各功能模块的每一主要部分之前添加块注释,注释每一组语句,在循环、流程的各分支等,尽可能多加以注释。其中的循环、条件、选择等位置必须注释。对于前后顺序不能颠倒的情况,建议在注释中增加序号。例如:在其他顺序执行的程序中,每隔35行语句,必须加一个注释,注明这一段语句所组成的小模块的作用。对于自己的一些比较独特的思想要求在注释中标明。6 程序健壮性:6.1 函数的返回值规范对于函数的返回位置,尽量保持单一性,即一个函数尽量做到只有一个返回位置。(单入口单出口)。要求大家统一函数的返回值,所有的函数的返回值都将以编码的方式返回。例如编码定义如下:#defineCM_POINT_IS_NULLCMMAKEHR(0X200):建议函数实现如下:long 函数名(参数,)long lResult;/保持错误号lResult=CM_OK;/如果参数有错误则返回错误号if(参数=NULL)lResult=CM_POINT_IS_NULL;goto END;END:return lResult;6.2 关于goto的应用禁止goto语句6.3 资源变量的处理(资源变量是指消耗系统资源的变量)对资源变量一定赋初值。分配的资源在用完后必须马上释放,并重新赋值。6.4 对复杂的条件判断为了程序的可读性,应该尽量使用括号。例:if(szFileName!=NULL)&(lCount=0)|(bIsReaded=TRUE)6.5 标识量对于程序中用到的标识量,应采取定义为大写常量的形式,并加以注释。如:0表示A模式,1表示B模式,2表示C模式#define MOD_A 0/A模式#define MOD_B 1/B模式#define MOD_C 2/C模式switch (mod)case MOD_A:case MOD_B:case MOD_C:default:break;6.6 对于switch语句switch 语句要求具有default语句。6.7 尽量使用私有变量和私有函数不需要被外部对象访问的变量和函数尽量采取私有或保护的方式申明。6.8 对象间变量的赋值对象内的数据成员尽量以私有变量的方式申明,需要被外界访问的变量通过为其添加的set和get函数实现数据的传递。6.9 模块化某一功能,如果重复实现三遍以上,即应考虑模块化,将它写成通用函数。并向小组成员发布。同时已要尽可能利用其它人的现成模块。模块化的一些注意事项:1. 设计好模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度大型建筑设施定期检查与维修服务合同
- 2025版建筑工程质量检测资料承包合同规范文本
- 二零二五年度企业临时应急资金借款合同模板
- 二零二五电信营业厅设施优化与装修合同范本
- 2025版担保合同备案与登记程序范本
- 二零二五年度精装修公寓工程合同模板大全
- 二零二五版不锈钢装饰条加工及销售协议
- 二零二五年度旅游度假村股权收购与资源整合合同
- 二零二五年度智慧型方自卸车租赁服务协议
- 潞安化工安全知识培训课件
- 粮食仓储(粮库)安全生产标准化管理体系全套资料汇编(2019-2020新标准实施模板)
- 喜茶运营管理手册和员工操作管理手册
- 比亚迪汉DM-i说明书
- 心肾综合征及其临床处理
- 普通高中课程方案
- 2022年山东高考生物试卷真题及答案详解(精校版)
- GB/T 38936-2020高温渗碳轴承钢
- 高考地理一轮复习课件 【知识精讲+高效课堂】 农业区位因素及其变化
- 教师专业发展与名师成长(学校师范专业公共课)
- 互通立交设计课件
- 生物竞赛辅导 动物行为学第七章 行为发育(38)课件
评论
0/150
提交评论