ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:53.66KB ,
资源ID:4766632      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4766632.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(软件编码规范.docx)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

软件编码规范.docx

1、天正软件编码规范 命名规范1、通则 1.1、在所有命名中,都应使用标准的英文单词或缩写,避免使用汉语拼音。 1.2、所有命名都应遵循达意原则,即名称应含义清晰、明确。 1.3、所有命名都不易过长,在可表达清晰的前提下越简洁越好。 1.4、所有命名都应尽量使用全称。 1.5、在类型名称特别复杂的时候,应使用typedef来定义别名。 2、标识符 2.1、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基 '本可以理解的缩写,避免使人产生误解。(较短的单词可通过去掉“元音''形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有 大家公认的缩写) 如下单词的常

2、用缩写applicationapp argumentarg averageavg blockblk bufferbuf commandcmd controlctrl databasedb deletedel descriptiondesc dialogdig dictionarydict dimensiondim distancedist documentdoc entityent escapeesc flagfig increaseinc informationinfo lengthlen VC++中常用控件缩写 Animateani CheckBoxchk ComboBoxcmb Edi

3、tedt GroupBoxgrp ListBoxIst Picturepiclibrarylib managermgr memorymem messagemsg objectobj passwordpwd picturepic ploylinepline pointerptr positionpos record rec referenceref resourcersc screenscr serversrv sourcesrc systemsys temptmp texttxt versionver windowwnd Progressprg PushButtonbtn RadioButt

4、onrad Scrol 旧 arsb Slidersld Staticstc TabControltab2.2、长的标识符应使用缩写来缩短长度,而特短的标识符应该避免使用缩写。 更恰当: intiFlagHMODULEhLoadedSysRsc 不恰当: intiFIgHMODULEhLoadedSystemResource 2.3、变量和封装体命名中单词或缩写的第一个字母应大写,其它字母小写,单 词和单词之间直接连接,不得有其它字符。在宏定义中全部用大写,单词 与单词之间必须用下划线连接。

5、 9.6、 注释应与其描述的代码相近,对代码的注释应放在其上方,不可放在下 方,并与其上面的代码用空行隔开,对enum体中成员和case语句的值 做注释时可以放在右方。 注释与所描述内容进行同样的缩排。 避免在一行代码或表达式的中间插入注释。 在关系较为紧密的一段代码之前应给予注释,表达下面代码的功能、意 图、算法等。 分支判断 10.1. BOOL/bool布尔值的判断 正确: 错误: if(bFlag) if(TRUE==bFlag) if(!bFlag) if(FALSE==bFlag)

6、 10.2. float/double浮点值的判断 正确: 错误: if(fabs(dValue1-dValue2)

7、具体数值的标号,而应用宏或枚举类型代替。 正确: 不恰当: #defineBOX_TYPE1 switch(iType) switch(iType) { { easel: caseBOX_TYPE: break; break; } } 10.7、 一般地,if判断中if和else要齐全 ,switch分支中所有case和default 要齐全。 循环 10、 9.7、 9.8、 9.9、 11、 11.1. 11.2. 11.3. 尽量减少循环体内的工作量,尽量减少循环层次。 在多重循环

8、中,应该将最忙的循环放在最内层。 对代码效率有要求或循环体较小时,避免在循环体内声明变量,应将变 量声明放在循环体之外;避免循环体内包含判断语句,应将循环体放在判 断语句的代码块中。 11.4. 循环判断条件应该有注释加以说明。 12、第三方代码和开发包(组件)12.1、推荐参考或引用第三方的源代码或开发包(组件)。 12.2. 引入的源代码或开发包(组件)必须成熟高效、具有源代码、没有版权问 题,否则未经允许不得引入。 12.3. 在引入第三方的源代码时,必须完全读懂和理解引入的代码,必须对源 代码的编码规范进行修改,添加注释,以符合当前项目的编码规范要求。 12.4、在引入第三

9、方开发包(组件)时,必须完整,并添加来源出处,增加详细 的使用说明和接口说明。对第三方开发包(组件),无须修改编码规范,必 须独立编译,生成单独模块。 三、修改规范 1、通则1.1、修改代码之前首先必须读懂代码。 1.2、应注释掉原来错误的代码,而不得随意删除,并写上错误原因。 1.3、在被修改的地方应写上修改信息,内容应包括:错误说明,修改方法、修 改人、修改时间 〃错误说明 〃解决方法〃修改人,修改时间 1.4、新加的代码应紧邻被注释掉的代码,以便查错和比较。 1.5、修改的错误信息应同时添加到更改记录文件的更改清单中。 1.6、不得随意修改或调整原来正确的代码,虽然原来的

10、代码实现复杂或书写不 规范。 四、项目管理规范 1 >通则1.1、工程中不起作用的文件或类应删除,工程目录下的非工程文件也应该移 走,保持工程的清洁,避免混淆难于管理 1.2、在VC++环境下,建议将常用的头文件在StdAfx.h中包含,而在每个cpp 开始处嵌入StdAfx.ho避免头文件的交叉引用,如果有交叉引用的,应适 当使用类的声明。 1.3、将独立性比较强的模块抽出来,做成DLL、控件或COM组件,该模块可 单独编写和测试,以增强其可重用性。 1.4、一个比较大的项目应留有一定的消息接口或插件接口等。 1.5、项目的版本控制要严格,版本格式为xx.xx.xx,必要时使用B

11、uild次数或 日期。高版本尽量兼容低版本的用法、数据或协议。 1.6、工程的编译宏定义和工程参数设置应正确,每作一个新工程时应检查工程 参数是否正确。 2、接口2.1、同一个项目的导入和导出声明应统一,建议在独立的一个文件中声明,其 他文件包含并使用。 示例: #ifdefTG_EXPORT #defineTG_API_declspec(dllexport) #else #defineTG_API_declspec(dllimport) #endif//TG_EXPORT classTG_APICMyExportClass ( }; 3、编译3.1、跟编译环境或版本有关的宏和

12、lib库,建议在独立的一个文件中声明,避 免设置到编译环境中,以防止混淆。 示例: #if_ACAD_VER==15#defineSAVEAS_DWGSaveAsR15 #pragmacomment(lib,“AcDb15.lib”)#elif_ACAD_VER==16 #defineSAVEAS_DWGSaveAsR16#pragmacomment(lib,“AcDb16.lib”) #endif//_ACAD_VER3.2、在编译氛境设置中应尽量使用相对路径或路径宏(如$(ProjectName)、 $(OutDir)等),以便更改一处后其他位置自动更改。 3.3、应排除编译过

13、程中的所有警告,对于个别无法排除的警告要充分了解其产 生的影响,确认它是正确的,应通过某种手段去掉告警信息。 4、目录结构项目清理和备份。 Fproductname I Fmodifyrecord I Hnc I Hib I FBin I FLibD I FBinD I l-Output I I FDebug I |「Release I Fprojectname I | Fmodifyrecord I i 卜Res 项目清理和备份。 Fproductname I Fmodifyrecord I Hnc I Hib I FBin I FLibD I

14、 FBinD I l-Output I I FDebug I |「Release I Fprojectname I | Fmodifyrecord I i 卜Res 4.1、项目标文档应分类管理,应将必须的文件和编译的临时文件分开,以方便卜产品目录(产品名称) I卜产品更改记录文件I卜导出头文件目录 I卜导出库文件目录(Release版本)I卜执行文件目录(Release版本) I卜导出库文件目录(Debug版本)I卜执行文件目录(Debug版本) I卜编译输出文件目录I I FDebug 版本 I |「Release 版本I卜项目文件目录(项目名称) I I卜项目更

15、改记录文件I I卜资源文件目录 5、备份5.1、项目要有备份记录,备份时注明备份日期和主要增加的功能。 5.2、根据程序量和内容修改情况,应定时进行备份。 5.3、在做大规模修改或结构性调整之前,应进行备份。 5.4、在项目进展到不同阶段间隔中,应进行备份。 5.5、在项目长时间暂停或休假时应做备份。 5.6、应使用多种介质备份,至少在硬盘上做2个备份,且不应将备份放在同一 个盘下。在适当的工程进度和时期下,应做光盘等其他介质的备份。 5.7、备份时应去掉编译中间文件和执行文件,VC++项目中的*.clw、*.ncb、 *.opt、*.plg、Laps等文件也应删除。 5.8

16、在项目完成发布时,应做多种介质备份,并同时将与项目有关的文档信 息、编译环境、编译工具、安装打包等一同备份。 五、界面设计规范 1、通则1.1、整体界面风格(颜色、字体、布局、交互等)应与操作系统的风格统一。 1.2、所有界面中的字体大小、窗体颜色、排列间隔、操作习惯应保持一致。 1.3、子窗体和控件应排列整齐,间距合理紧凑,均匀对称。 1.4、窗体的尺寸比例应协调,不可过长或过窄。 1.5、界面显示位置应固定,且方便交互。 1.6、功能提示清晰明了,操作简单易用。 2、颜色选择2.1、基调应以操作系统窗体颜色为主,除系统窗体基本颜色外,其它的颜色总 数不宜超过3种。(具有换

17、肤功能的,由界面风格管理模块控制) 2.2、子窗体和控件(除Edit、RichEdit等编辑控件外)的背景色应与父窗体背 景一致,当一个控件有输入焦点或鼠标焦点时,可以用较明亮的颜色。 2.3、非激活状态下,应使用窗体的基本颜色;禁用状态下,应使用较暗的颜 色;具有提示或警示性的内容,可以使用较明亮的颜色。 3、字体的选择3.1、汉字字体一般选宋体,字体大小选9号(五号)。 3.2、一般选系统常用的字体,禁止使用自己品入南而系统没有的字体。 3.3、在需要有区分的文字场合,一般使用文字加粗或改变文字颜色。 4、图片的选择4.1、在窗体的工具拦中的按钮可以用图标,文字可以写上也可以不

18、写,如果不 写则一定要使用Tip和状态栏信息来提示用户该按钮完成的功能。 4.2、在按钮中使用的图片要能表达按钮对应功能的意义。 4.3、应提供反映当前操作或状态的图片,可以使用自画方式达到所见即所得的 效果。 4.4、图片的显示应防止闪烁 5、操作的便利性5.1、为方便用户的使用,所有的输入控件应该按TAB键排序。在有连续的输 入界面中,可以提供能用回车切换输入框的焦点。 5.2、TAB键和控件排列循序应根据操作顺序从左往右、从上往下循序排布。 5.3、编辑内容支持取消和确认操作的,应当处理好ESC键和ENTER键的响 应,防止和窗体默认处理方式产生混淆。 5.4、应支持键盘操

19、作或快捷键的操作。 5.5、对于易于混淆或没有文字说明的控件和操作,应提供说明性文字、提示或 帮助信息。 5.6、对常用功能应提供快捷菜单,在菜单和工具栏中优先位置排列。 5.7、界面进入时应能保留上一次最后操作状态。 6、数据安全6.1、对程序的退出、写数据等有破坏可能或数据丢失可能的操作应该给用户一 次确认的机会。 7、窗体尺寸7.1、一般窗体的大小应该可以让用户自己调整,窗体的初始长宽比例为4:3o 7.2、要考虑到用户可能会用到不同的分辨率,在开发时应使用当时流行的分辨 率,在不同分辨率下布局情况应该不变。 7.3、窗体的大小用户可以自己调整时,应处理窗体变化时窗体内各控

20、件大小和 位置的变化。 8、操作进度指示8.1、在处理一个漫长的操作式,应有等待提示,如把鼠标光标暂时变成沙漏形 状或显示一个等待的动画界面。 8.2、沙漏光标一般指示短暂的等待。对于长时间的等待,可以考虑使用一个无 模式对话框,并在上面显示动画或简短的消息,描述正进行什么处理。 9、分隔线控件为统一起见不要使用分组框、按钮等控件做分隔线,应按如下做法:用 PictureControl,属性设为Etched或Frame,使该控件缩小到一条直线。 10、多国语言要考虑界面的多国语言版本的可能,为控件安排足够的空间以保证能够 容纳不同语言文本。 10.1. 字符串不应内嵌到代码中,应从资

21、源或文件中获取。 2.4、 2.5、 2.6、 2.7、 Temp_Resourcetemp_resource tempresource #defineReg_Key 除了编译开关/头文件等特殊应用,应避免使用—EXAMPLE_TEST_之类以 下划线开始和结尾的定义。 对于变量命名,禁止取单个字符(如i、j、k...),命名除了要有具体含义 外,还能表明其变量类型、数据类型等,但i、j、k等作局部循环变量是 允许的。 命名时,如果需要进一步分类时,分类属性应放在前面。 正确: CListBoxm_wndLstFonts; CComboBoxm_wndCmbColors;

22、 命名中若使用辱殊约定或缩写, TempResource #defineREG KEY 错误: CListBoxm_wndFontsLst; CComboBoxm_wndColorsCmb; 则要有注释说明。7应该在源文件的开始 之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注 释说明) 2.8、在命名规范中没有规定到的地方,才可以使用自己特有的命名风格,要自 始至终保持一致,不可来回变化。 2.9、除非必要,不要用数字或较奇怪的字符来定义标识符。 正确:错误: #defineEXAMPLE_TEST#defineEXAMPLE_OT estLockDrive

23、rT est123 2.10、在同一软件产品内,应规划好接口部分标识符的命名,防止编译、链接时产生冲突,可在普通标识基础上加上模块标识。 示例: 在 TGRX 模块中可定义为 CTGRxObjectg_rxRegistry在 TGDB 模块中可定义为 CTGDbBlockRecordg_dbGlobal 在 TGGui 模块中可定义为 CTGUiFrameWndg_uiCmdMgr 2.11、命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如有关STL的代码应使用STL中的全小写加下划线的风格,有关MFC的 代码则使用大小写混排的方式。 3、封装体 3.1、采用前缀

24、和以大写开头的英文单词或缩写组成,即:前缀+标识符。 简写类型说明 Cclass 类 Sstruct结构体 Eenum枚举 Uunion联合体 示例: classCTree{}; structSResBuf{}; enumESeekType{}; unionUResVal{};4、变量 前缀+类型+标识符。 示例: m_arsNamemJFilePos s_cConfigs_iLoopTimes g_hResouceg_sModuleName structSTreeData ( HICONhTreelcon; T CHARszT reeName; }; 4.1、变

25、量命名应遵循匈牙利记法,即: 4.2、前缀简写类型说明 m_classmember类的成 员变量 s_staticvariable静态全局变量 g_globalvariable普通全局变量 注意: 1、struct/union中的成员变量不加前 缀,即:类型+标识符2、const成员变量应使用k+标识符 4.3、 3、enum中的成员应使用k+标识符 classCVector3d ( constCVector3dkldentity; constCVector3dkXAxis; } enumEDirection ( kLeft, kRight, }; enumEErro

26、rStatus ( kOk, kOutOfMemory, }; 类型 基本类型 简写类型说明 bybyte字节 bbool布尔型 nshort短整型 nUINT无符号整型 iint整型 Hong长整型 wWORD双字节 dwDWORD四字节 ffloat浮点数 ddouble双精度数 chchar字符型 szchar[]以0结尾的字符串 crCOLORREFcolorref pszLPCTSTRconstchar* 字符串指针 pszLPTSTRchar*字符串指针 wndwindow 窗口类 fnfunction 函数 ppointer 指针 ararray 数组 Ist

27、list *表 mapmap影射 eenum枚举 uunion联合 cstruct 一般的结构体 cclass 一般的类 注意: 1、有的类型可以组合以表示复杂的数 据类型,即:主数据类型+修饰类型 2、字符串指针char*、constchar*应使 用 LPTSTR、LPCTSTR 替代 3、在类型前加const,命名约定不变 示例: bytebyVal:BYTEbyVal; boolbVal;BOOLbVal; shortnVal;SHORTnVal; UI NTn Vai ;C UI nt Arrayarn Vai; intiVal;INTiVal; longlVal;LON

28、GiVal;ULONGIVal; WORDwVal;WORDg_wVal; DWORDdwVal;DWORDm_dwVal; floatfVal;float&fVal; doubledVal;double*pdVal; charchVal;TCHARchVal; charszName[5];TCHARszName[5] COLORREFcrBackground; LPCTSTRpszName; LPTSTRpszName=newTCHAR[5]; CButtonwndOk;CToolBarwndTBar WNDPROCpfnProc; void*pUnknown;LPCTSTRpszKey;

29、 CStringArrayarsVal; CPtrListlstpVal; CMapPtrToPtrmapVal; enumEFileTypeeFileType; unionUResvalcVal; structST reeDatacData; classCStudentcXiaoMing ; void**ppVal; CStringArrayarsNames; LPCTSTRpszName; LPCTSTRpszVal;LPTSTRpszVal; Windows/VC++/MFC 类型 sCString字符串 dcCDC设备环境对象 bmpCBitmap 位图 CStringsF

30、ileName; CCIientDCdcMem; CBitmapbmpLogo; penCPen 画笔 brCBrush 画刷 fntCFont 字体 rgnCRgn 区域 imglstCImageList 图片列表 mnuCMenu 菜单 ptCPoint 点 vtvector 向量 matmatrix 矩阵 szCSize 尺寸 rcCRect 矩形 tmCTime 时间 posPOSITION 位置 hhandle句柄类 psm

31、artpoint <育旧指针 AutoCAD/ObjectARX 类型 ptads_pointads 点 entads_nameads 实体 ssads_nameads 选择集 matads_matrixads 矩阵 dads_realads 实数 rbstructresbufads 链表 ptAcGePoint2d/3d 点 vtAcGeVector2d/3d 向量 scAcGeScale2d/3d 比例 matAcGeMatrix2d/3d 矩阵 extAcDbExtents 边界 idAcDbObjectldid arAcArray 数组 tolAcGeTol 误差 CPenpenRe

32、d; CBrushbrBlue; CFontfntArial; CRgnrgnClip; ClmageListimglstlcons; CMenumnuPopup; CPointptPosition;POINTptMouse vectorvtVal; matrixmatT ransform; CSizeszNormal; CRectrcClient;RECTrcDefault; CTimetmCurrent; POSITIONposStart; HDChDC;HTREEITEMhParent; _com_ptr_t<...>P Interface; ads_pointptSta

33、rt; ads_nameentLine; ads_namessPickSet; ads_matrixmatTransform; ads_realdDistance; structresbufrbXData; AcGePoint3dptPosition; AcGeVector2dvtDirection; AcGeScale3dscZoom; AcGeMatrix2dmatRotate AcDbExtentsextView; AcDbObjectldidEnt; AcDbVoidPtrArrayarpSubEntity;AcGeToltolTemp; 5、函数 5.1、5.2、 推

34、荐使用动宾结构。函数名应清晰反映函数的功能、用途,见名知意。 常见的函数命名开始: lnit_,Open_,Create_,Get_,Set_,Read_,Load_,Write_,Start—Stop_,Check_,Test_,Fill_,Process.,Sc函疫名每个单词或缩写的第一个字母必须大写。 正确: voidDoJig() BOOLIsEmpty();错误: voidDO_JIG(); voidDo_Jig(); 6、宏6.1、使用单词或单词缩写,所有字母大写,单词之间使用_分隔。 6.2、在定义类似函数或变量的宏时例外,可参照函数

35、或变量的命名规范。 示例: #definelsZero(dVal)(fabs(dVal)

36、型缩写。 常用控件命名列表: 文本 StaticlDC_STC_XXXm_wndStcXxx PicturelDC_PIC_XXXm_wndPicXxx 编辑框 EditTDC_EDT_XXXm_wndEdtXxx ComboBoxlDC_CMB_XXXm_wndCmbXxx GroupBoxlDC_GRP_XXXm_wndGrpXxx PushButtonlDC_BTN_XXXm_wndBtnXxx RadioButton I DC_RAD_XXXm_wndRadXxx CheckBoxlDC_CHK_>O

37、Xxx ScrollBarlDC_SCR_XXXm_wndScrXxx SpinlDC_SPN_XXXm_wndSpnXxx ProgresslDC_PRG_XXXm_wndPrgXxx SliderlDC_SLD_X)O

38、包含使用。 1.3、不要随意定义全局变量,尽量使用局部变量。 1.4、全局变量和函数应放到命名空间中或静态类中或声明成静态函数。 1.5、程序结构清晰,简单易懂,单个函数的程序行数尽量短。 1.6、变量使用时要注意越界。 1.7、字符串操作应该支持处理UNICODEo1.8、使用指针之前要做有效性判断。 2、源文件2.1、在源文件(.h/.cpp)的开头应包含一段格式统一的说明,至少包括以下内 容:版权说明、文件名称、版本号、作者、生成时间、文件功能用途说 明、维护记录。 //Copyright(C),1998-2007,BeijingTangentEngineeringSoft

39、wareCo.Ltd. //=FileName:文件名称〃=Version:版本号 //=Author:作者//=Date:创建时间 〃=Description:文件功能、用途等说明//=Maintainers: 〃版本号时间修改人修改内容2.2、对于同时对应有.h和.cpp的文件,维护记录(Maintainers)应写在・h中,则 在.cpp中可以省略。 2.3、在头文件(.h)中应提供为防止文件交叉包含的预编译宏,宏的定义应和 文件名称一致,格式应为"_XXXX_H_” o示例: #if!defined(_MYSAMPLE_H_)#define_MYSAMPLE_H_ #end

40、if//_MYSAMPLE_H_ 2.4、对于无关的垃圾注释R及向导注释,一律清除,保持文件内容整洁。 3、封装体3.1、在cIass/struct/union/enum等封装体声明之前,应包含有对该封装体的功 能用途等有关的说明。 3.2、函数的声明应在变量的声明之前,不同的访问属性应按 public/protected/private 循序先后声明。 3.3、不被公开使用的声明不应放置在public块下,不需被继承的声明应放置在 private 块下。 3.4、一行只能声明一个成员变量或成员函数。 3.5、除了自动生成的Wizard代码,声明的变量和函数必须注释,且注释应该 在

41、其之前独占一行,并排列对齐。 3.6、对于enum的声明中,第一个成员应赋初始值,成员的注释可以放置在成 员的声明之后。 3.7、struct/union中成员应使用简单数据类型3.8、在仅有数据成员的封装体中允许成员变量不带m_前缀,在表达数据分量 和使用频繁的情况下允许成员不带m_前缀(如点对象的分量x, y) o 3.9、对于不从其他封装体继承也确定不被继承的封装体,析构函数不应使用 virtual修饰词。 3.10、封装体中元素的个数应适中并合理排布。若结构中元素个数过多可考虑 依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。 3.11、封装体的功能要单一,是针

42、对一种事务的抽象;不要设计面面俱到,非 常灵活的数据结构;不同封装体间的关系不要过于复杂;封装体的设计要 考虑兼容和升级问题。 4、变量4.1、变量应随时用随时声明,对代码效率有要求的循环体中,变量应声明在循 环体外。 4.2、变量声明的同时应赋初值,析构或程序退出时判断释放所有变量。 4.3、一个变量只做一种应用,赋予一种意义。 4.4、对于作用域较大的变量和重要意义的变量应给予必要的注释。 4.5、指针型变量声明应一行只声明一个,不应与其他类型变量一起声明;声明 中“*"号既可以紧接类型,也可以紧接变量名,不可以单独隔开。 4.6、不同类型的变量声明应各自独占一行,不可混到同一

43、行。 5、函数 5.1、提高函数独立性,降低函数间的耦合度,一个函数应该只实现一个功能。 5.2、除非极其简单,否则应有注释说明,内容包括:功能、入口/出口参数、返 回值,必要时应该有维护记录。 //=FunctionName:函数名称//=Description:函数功能、用途等说明 //=Return:类型、返回值范围和意义//=Parameters: 〃类型变量名[IN/OUT]取值范围和说明//=Maintainers: 〃版本号时间修改人修改内容5.3、不要将没有关联的语句放到一个函数中,避免函数中的不必要语句,防止 程序中的垃圾代码。 不恰当: voidlnitV

44、ar() 更恰当: 〃初始化矩形的长与宽 〃初始化矩形长宽 rect.length=O; rect.width=O; 〃初始化点的坐标 point.x=10; point.y=10; } voidlnitRect() rect.length=O; rect.width=O; ) 〃初始化点的坐标 voidlnitPoint() point.x=10; point.y=10; } 5.4、函数功能是可以预测的,输入数据相同时就应该产生相同的输出。 5.5、函数的参数不允许在函数体内被修改的应加修饰词const,函数返回值不 允许被修改的应加修饰词const,但是对于

45、简单数据类型除外。 5.6、成员函数中,如果不涉及到对封装体数据成员修改的,应在函数最后加修 饰词consto5.7、参数传递中,如果参数包含大量数据时,应使用引用或指针方式传递。 5.8、函数返回值范围应充分考虑,并作全面处理。 5.9、要检查函数参数的合法性,对函数参数的合法性检查可以由函数的调用者 负责,也可以由函数本身负责,同一项目应使用同一种检查方法,缺省是 由函数调用者负责,在函数本身只使用断言宏为调试使用。 5.10、防止将函数的参数作为工作变量,函数调用不成功时,函数参数保证不 被修改。 5.11、重复且独立性较强的代码应抽取成函数,功能不明确且较小的函数,特 别是仅

46、有一个上级函数调用它时,应考虑把它合并到上级函数中,而不必 单独存在。 5.12、递归调用特别是函数间的递归调用(如A->B->C->A),影响程序的可 理解性;递归调用一般都占用较多的系统资源(如栈空间);递归调用对 程序的测试有一定影响。故除非为某些算法或功能的实现方便,应减少没 必要的递归调用。 6、宏 6.1. 宏定义表达式时,要注意完备的括号。 正确: #defineAREA(dL,dH)((dL)*(dH)) 错误: #defineAREA(dL,dH)dL*dH 6.2. 将宏所定义的多条表达式放在大括号中。 6.3. 使用宏时,不允许参数发生变化。 6.4、

47、 正确: #defineSQUARE(iX)((iX)*(iX)) intiVal=5; intiRes=SQUARE(iVal); iVal++; 错误: #defineSQUARE(iX)((iX)*(iX)) intiVal=5; int 旧 es=SQUARE(iVal++); 宏定义中一般不使用缩进,但是当宏定义比较复杂时可使用缩进。 6.5、对较复杂的断言宏加上明确的注释,不能用断言宏来检查最终产品肯定会出现且必须处理的错误情况。 7、排版 7.1、相对独立的程序块之间、函数间要有空行分开。 7.2、变量的定义尽可能放在最开始处,多态函数和功能相近的函数集中放

48、在一 起。 7.3、循环、分支代码,判断条件与执行代码不得在同一行上,且循环体外要加 花括号"{}" o7.4、程序块的分界符“{}"应独占一行,且位于同一列,同时与引用它们的语 句左对齐。 7.5、不允许把多个短语句写在一行中,即一行只写一条语句。 7.6、声明变量时对齐变量名,并在定义时加以注释说明。 7.7、在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之 前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如一>)后不应加空格。 规则: 1. 逗号、分号只在后面加空格一些双目操作符如" ="、"+=” 等前后应加空格 2. 一些单目操作符

49、前后不加空格前后不加空格 3. if、for、while, switch 等与后面的 括号间应加空格函数名与后面的括号不应加空格 4. 不要连续留两个以上空格 示例: intiAJBJC; iA=iB+iC;iA=iBA2; iA*=2;iA+=旧; *piA=iA;iA++; pA->idK=iK;ptA.x=dX; if(iA+旧 viC)while(iA>=0) switch(eType) MessageBox("Ok!”); 7.8、对齐和缩进以TAB为单位,不使用空格。1个TAB为4个空格。 下列情况,代码缩进一个TAB:下列情况,不必缩进: 5. 函数体相对函数名及

50、}”1. switch之后的case、defaultif、else、for、while、do 等耽行体 2. Public, protected, private 关键字 6. c I as s/st r u ct/u n i o n/e n u m 成 员 7.9、划分新行长的语句(>80字符)要分多行书写。 1. 长表达式要在低优先级操作符处划分新行。 2. 操作符放在新行之首。 3. 新行应有适当的缩进。 示例: BOOLbFlag=((iTaskNo

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服