《VC++编程规范(10页).doc》由会员分享,可在线阅读,更多相关《VC++编程规范(10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-VC+编程规范-第 8 页xxxxx公司20xx年 10 月VC+编程规范 VC+ Coding Convention一、风格21.基本要求22.可读性要求23. 结构化要求34. 正确性与容错性要求35. 可重用性要求4二、注释41. 注释使用的语言42.文件开始注释43.方法注释54.程序中注释5三、命名61.命名原则62.类成员变量的命名63.局部变量的命名64.临时变量的命名75.函数名命名76.宏命名和typedef定义类型77.自定义消息78.常量命名89.资源名字定义格式:810.方法命名和命名空间,类的命名,接口的命名811.事件方法的命名:812.接口的命名913.控件的命
2、名:9四、工程文件组织形式9一、 风格1.基本要求 1.1 程序结构清析,简单易懂,单个方法的程序行数不得超过100行。每个方法应该且只应该完成一件事情,方法不应该有副作用。 1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。 1.3 尽量使用标准库和公共方法。 1.4 不要随意定义全局变量,尽量使用局部变量。2.可读性要求 2.1 可读性第一,效率第二。 2.2 保持注释与代码完全一致。 2.3 每个源程序文件,都有文件头说明,说明规格见规范。 2.4 每个方法,都有方法头说明,说明规格见规范。 2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。 2.7 常
3、量定义(DEFINE)有相应说明。 2.8 处理过程的每个阶段都有相关注释说明。 2.9 在典型算法前都有注释。 2.10 利用缩进显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为4个字节。 2.11 循环、分支层次不要超过五层。 2.12 注释可以与语句在同一行,也可以在上行。 2.13 空行和空白字符也是一种特殊注释。 2.14 一目了然的语句不加注释。 2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。 2.16 注释行数(不包括程序头和方法头说明部份)应占总行数的 1/5 到 1/3 。2.17程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的
4、程序.2.18版本封存以后的修改一定要将做好注释,并要在文件及方法的修改记录中加以记录。3. 结构化要求3.1 禁止出现两条等价的支路。3.2 尽量不采用GOTO语句。 3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。3.4 用 CASE 实现多路分支。3.5 避免从循环引出多个出口。3.6 方法只有一个出口。3.7 避免不必要的分支。3.8 不要轻易用条件分支去替换逻辑表达式。.9 不要轻易使用递归算法,尤其在访问数据库的时候。3.10 程序中每个block 的开头 ” 及 ” 必须对齐,嵌套的block 每进一套,缩进一个tab,T
5、AB 为4个空格,block类型包括if、for、while、do等关键字引出的结构语句。3.11 对于比较大的方法,每个block 和特殊的方法调用,都必须注明其功能4. 正确性与容错性要求4.1 程序首先是正确,其次是优美4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。4.4 所有变量在调用前必须被初始化。4.5 对所有的用户输入,必须进行合法性检查。 4.6 不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠4.7 程序与环境或状态发生关系时,必须主动去处理发生的意外
6、事件,如文件能否逻辑锁定、打印机是否联机等。对于明确的错误,要有明确的容错代码提示用户。4.8尽量使用编译器已经提供的函数,不必花时间另行编写。例如系统已经有qsort函数,可直接拿来排序用。4.9 尽量使用规范的容错语句. 例如:trycatchfinally5. 可重用性要求5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。5.2 公共控件或类应减少外界联系,考虑独立性或封装性。5.3 公共控件或类应建立使用模板。二、 注释1. 注释使用的语言原则上注释要求使用中文;2.文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复杂的算法需要加上流程说明
7、;例如: 文件开头的注释模板* 文件名:* Copyright (c) xxxxx *公司技术开发部* 创建人:* 日 期:* 修改人:* 日 期:* 描 述:* 版 本:3.方法注释包括:输入、输出、方法描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;例如: 方法开头的注释模板* 方法名:* 输 入: a,b,c* a-* b-* c-* 输 出: x-* x 为 1, 表示.* x 为 0, 表示.* 功能描述:* 全局变量:* 调用模块:* 作 者:* 日 期:* 修 改:* 日 期:* 版本4.程序中注释包括:修改时间和作者、方便理解的注释等;例如: 程序中的注释
8、模板/* 注释内容 */或者/by name add/del/modi YYYY/MM/DDfor xxxxx三、 命名1.命名原则命名应尽量使用匈牙利命名法,变量名或函数名中使用大写字符来区分各个部分,以便于记忆和阅读。如bPatchMinute,DeleteDirInfo()。全局(包括类中的)变量用长名字,局部变量用短名字。2.类成员变量的命名类成员变量前一般应加上m_,全局变量加上g_,仅与本模块有关的变量加上l_,紧接着是变量的类型。整型:n,i长整型:l无符号整型:u无符号长整型:dw字符:ch布尔量:b浮点数:f双精度浮点:d字符串:str,lpsz,sz,p,lp,ac,指针:
9、p字节指针:pb无符号指针:pv字符指针:lpsz整型指针:lpn文件指针:fp如:m_nTotalNum,m_strPath,m_bRcving,m_fPrice,g_lOpenDate,g_dwCardNo,lpszNameStr,lpnSysDoomType,uMsgID,m_pProgress3.局部变量的命名局部变量应尽量易懂简洁,使用常见的变量,如Num,nCount,i,j,k,n,len,pos,offset,nReadNum,index,nRet,ret,string,filename4.临时变量的命名如ltmp,ftmp,tmpStr,tempStr,5.函数名命名函数命名
10、也应该见名知意。如CalcAllDataStyle(),ReadDocDataFromTime(),GetIndexInfo()常见的函数Init,OpenAll,Create_,Get_,Set_,Read_,Load_,Write_,Start_,Stop_,Check_,Test_,Fill_,Process_,Sort_,Do_,Select_,Is_,Exist_,_Ex。6.宏命名和typedef定义类型应详细,避免重复,一律为大写,如#defineDEL_EMPTY(a)if(a)deletea;a=NULL;#defineSUCCESS0#defineFAIL-1typedef
11、structcharlpzSource100;charlpzTitle100;charlpzURL194;shortnType;longnpos;longnlen;ATTBODY,*LPATTBODY;(指针前加LP)7.自定义消息从WM_USER开始#defineMYAPP_MESSAGEWM_USER+0x10018.常量命名常量定义必须具有一定的实际意义;常量定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,说明其作用;9.资源名字定义格式:菜单:IDM_XX或者CM_XX位图:IDB_XX对话框:IDD_XX字符串:IDS_XXDLG
12、INIT:DIALOG_XXICON:IDR_XX10.方法命名和命名空间,类的命名,接口的命名方法原型说明包括引用外来方法及内部方法,外部引用必须在右侧注明方法来源: 模块名及文件名, 如是内部方法,只要注释其定义文件名;第一个字母必须使用大写字母,要求用大小写字母组合规范方法命名,必要时可用下划线间隔,示例如下:void PrintTrackData ( );void ShowChar (int , int ,char);11.事件方法的命名: void EventH(object sd,Event e) /Event 表示事件响应的方法12.接口的命名 接口的命名一般都以I作为首字母,为
13、了和类区分,例如: interface IA 13.控件的命名:fm 窗口cmd 按钮cob combo,下拉式列表框txt 文本输入框lab labal,标签img image,图象pic picturegrd Grid,网格scr 滚动条lst 列表框也可以是:Fm 窗口Cmd 按钮Cob combo,下拉式列表框Txt 文本输入框Lab labal,标签Img image,图象Pic pictureGrd Grid,网格Scr 滚动条Lst 列表框Frm frame四、 工程文件组织形式l 一个工程往往包含很多很多文件(*.h,*.cpp,*.inc,*.lib,资源文件等),向工程中加
14、入文件或删除工程中的文件要慎重,避免把工程损坏。工程中不起作用的文件或类应删除,工程目录下的非工程文件也应该移走,保持工程的清洁,避免混淆难于管理。工程文件如果很多,应归类。l 在VC环境下,建议将常用的头文件全部放入stdafx.h中,而在每个cpp开始处嵌入stdafx.h。避免头文件的交叉引用,如果有严重的交叉引用,适当使用类的声明。l 将独立性比较强的模块抽出来,做成DLL,控件或COM组件,该模块可单独编写和测试,也增强了其可重用性。l 一个比较大的工程应留有一定的消息接口或插件接口等。l 工程的版本控制要严格,版本格式为xx.xx.xx,必要时使用Build次数或日期。高版本尽量兼
15、容低版本的用法、数据或协议。l 工程的编译宏定义和工程参数设置应正确,每作一个新工程时应检查工程参数是否正确。l 建议字节对齐方式为8字节对齐。l 工程文件应经常备份,备份时注明备份日期和主要增加的功能。l 类一般有两个文件,一个头文件,一个实现体CPP。l 类力求封装好,严格区分public,private,protect等作用域,如果一个函数与本类有莫大的关系,可以作为该类的静态成员函数,不用或少用友元函数等破坏类封装性的方法和技巧。如果一些结构或宏仅与本类有关,可在类头文件中定义。l 类的成员变量在构造函数或初始化函数中应赋初值。指针在构造函数中赋NULL,析构时DEL_EMPTY它,以免内存泄露。