软件编码规范

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

天正软件编码规范一、命名规范1、通则1.1、在所有命名中,都应使用标准的英文单词或缩写,避免使用汉语拼音。1.2、所有命名都应遵循达意原则,即名称应含义清晰、明确。1.3、所有命名都不易过长,在可表达清晰的前提下越简洁越好。1.4、所有命名都应尽量使用全称。1.5、在类型名称特别复杂的时候,应使用typedef来定义别名。2、标识符2.1、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。(较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写)如下单词的常用缩写applicationappargumentargaverageavgblockblkbufferbufcommandcmdcontrolctrldatabasedbdeletedeldescriptiondescdialogdlgdictionarydictdimensiondimdistancedistdocumentdocentityentescapeescflagflgincreaseincinformationinfolengthlenlibrarylibmanagermgrmemorymemmessagemsgobjectobjpasswordpwdpicturepicploylineplinepointerptrpositionposrecordrecreferencerefresourcerscscreenscrserversrvsourcesrcsystemsystemptmptexttxtversionverwindowwndVC++中常用控件缩写AnimateaniCheckBoxchkComboBoxcmbEditedtGroupBoxgrpListBoxlstPicturepicProgressprgPushButtonbtnRadioButtonradScrollBarsbSlidersldStaticstcTabControltab2.2、长的标识符应使用缩写来缩短长度,而特短的标识符应该避免使用缩写。更恰当:intiFlagHMODULEhLoadedSysRsc不恰当:intiFlgHMODULEhLoadedSystemResource2.3、变量和封装体命名中单词或缩写的第一个字母应大写,其它字母小写,单词和单词之间直接连接,不得有其它字符。在宏定义中全部用大写,单词与单词之间必须用下划线连接。正确:TempResource#defineREG_KEY错误:Temp_Resourcetemp_resourcetempresource#defineReg_Key2.4、除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。2.5、对于变量命名,禁止取单个字符(如i、j、k...),命名除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k等作局部循环变量是允许的。2.6、命名时,如果需要进一步分类时,分类属性应放在前面。正确:CListBoxm_wndLstFonts;CComboBoxm_wndCmbColors;错误:CListBoxm_wndFontsLst;CComboBoxm_wndColorsCmb;2.7、命名中若使用特殊约定或缩写,则要有注释说明。(应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明)2.8、在命名规范中没有规定到的地方,才可以使用自己特有的命名风格,要自始至终保持一致,不可来回变化。2.9、除非必要,不要用数字或较奇怪的字符来定义标识符。正确:#defineEXAMPLE_TESTTestLockDriver错误:#defineEXAMPLE_0Test1232.10、在同一软件产品内,应规划好接口部分标识符的命名,防止编译、链接时产生冲突,可在普通标识基础上加上模块标识。示例:在TGRX模块中可定义为CTGRxObjectg_rxRegistry在TGDB模块中可定义为CTGDbBlockRecordg_dbGlobal在TGGui模块中可定义为CTGUiFrameWndg_uiCmdMgr2.11、命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如有关STL的代码应使用STL中的全小写加下划线的风格,有关MFC的代码则使用大小写混排的方式。3、封装体3.1、采用前缀和以大写开头的英文单词或缩写组成,即:前缀+标识符。简写类型说明Cclass类Sstruct结构体Eenum枚举Uunion联合体示例:classCTree{};structSResBuf{};enumESeekType{};unionUResVal{};4、变量4.1、变量命名应遵循匈牙利记法,即:前缀+类型+标识符。4.2、前缀简写类型说明m_classmember类的成员变量s_staticvariable静态全局变量示例:m_arsNamem_lFilePoss_cConfigs_iLoopTimesg_globalvariable普通全局变量注意:1、struct/union中的成员变量不加前缀,即:类型+标识符2、const成员变量应使用k+标识符3、enum中的成员应使用k+标识符g_hResouceg_sModuleNamestructSTreeData{HICONhTreeIcon;TCHARszTreeName;};classCVector3d{constCVector3dkIdentity;constCVector3dkXAxis;}enumEDirection{kLeft,kRight,};enumEErrorStatus{kOk,kOutOfMemory,};4.3、类型基本类型简写类型说明bybyte字节bbool布尔型nshort短整型nUINT无符号整型iint整型llong长整型wWORD双字节dwDWORD四字节ffloat浮点数ddouble双精度数chchar字符型szchar[]以0结尾的字符串crCOLORREFcolorrefpszLPCTSTRconstchar*字符串指针pszLPTSTRchar*字符串指针wndwindow窗口类fnfunction函数ppointer指针ararray数组lstlist链表mapmap影射eenum枚举uunion联合cstruct一般的结构体cclass一般的类注意:1、有的类型可以组合以表示复杂的数据类型,即:主数据类型+修饰类型示例:bytebyVal;BYTEbyVal;boolbVal;BOOLbVal;shortnVal;SHORTnVal;UINTnVal;CUIntArrayarnVal;intiVal;INTiVal;longlVal;LONGiVal;ULONGlVal;WORDwVal;WORDg_wVal;DWORDdwVal;DWORDm_dwVal;floatfVal;float&fVal;doubledVal;double*pdVal;charchVal;TCHARchVal;charszName[5];TCHARszName[5]COLORREFcrBackground;LPCTSTRpszName;LPTSTRpszName=newTCHAR[5];CButtonwndOk;CToolBarwndTBarWNDPROCpfnProc;void*pUnknown;LPCTSTRpszKey;CStringArrayarsVal;CPtrListlstpVal;CMapPtrToPtrmapVal;enumEFileTypeeFileType;unionUResvalcVal;structSTreeDatacData;classCStudentcXiaoMing;void**ppVal;CStringArrayarsNames;LPCTSTRpszName;2、字符串指针char*、constchar*应使用LPTSTR、LPCTSTR替代3、在类型前加const,命名约定不变LPCTSTRpszVal;LPTSTRpszVal;Windows/VC++/MFC类型sCString字符串dcCDC设备环境对象bmpCBitmap位图penCPen画笔brCBrush画刷fntCFont字体rgnCRgn区域imglstCImageList图片列表mnuCMenu菜单ptCPoint点vtvector向量matmatrix矩阵szCSize尺寸rcCRect矩形tmCTime时间posPOSITION位置hhandle句柄类psmartpoint智能指针CStringsFileName;CClientDCdcMem;CBitmapbmpLogo;CPenpenRed;CBrushbrBlue;CFontfntArial;CRgnrgnClip;CImageListimglstIcons;CMenumnuPopup;CPointptPosition;POINTptMousevectorvtVal;matrixmatTransform;CSizeszNormal;CRectrcClient;RECTrcDefault;CTimetmCurrent;POSITIONposStart;HDChDC;HTREEITEMhParent;_com_ptr_t…pInterface;AutoCAD/ObjectARX类型ptads_pointads点entads_nameads实体ssads_nameads选择集matads_matrixads矩阵dads_realads实数rbstructresbufads链表ptAcGePoint2d/3d点vtAcGeVector2d/3d向量scAcGeScale2d/3d比例matAcGeMatrix2d/3d矩阵extAcDbExtents边界idAcDbObjectIdidarAcArray数组tolAcGeTol误差ads_pointptStart;ads_nameentLine;ads_namessPickSet;ads_matrixmatTransform;ads_realdDistance;structresbufrbXData;AcGePoint3dptPosition;AcGeVector2dvtDirection;AcGeScale3dscZoom;AcGeMatrix2dmatRotateAcDbExtentsextView;AcDbObjectIdidEnt;AcDbVoidPtrArrayarpSubEntity;AcGeToltolTemp;5、函数5.1、推荐使用动宾结构。函数名应清晰反映函数的功能、用途,见名知意。常见的函数命名开始:Init_,Open_,Create_,Get_,Set_,Read_,Load_,Write_,Start_,Stop_,Check_,Test_,Fill_,Process_,Sort_,Do_,Select_,Is_,Exist_,5.2、函数名每个单词或缩写的第一个字母必须大写。正确:voidDoJig()BOOLIsEmpty();错误:voidDO_JIG();voidDo_Jig();6、宏6.1、使用单词或单词缩写,所有字母大写,单词之间使用_分隔。6.2、在定义类似函数或变量的宏时例外,可参照函数或变量的命名规范。示例:#defineIsZero(dVal)(fabs(dVal)EPS)#defineg_rxRegistryAcRxRegistry::cast(g_cGlobal.GetRegistry())7、文件名7.1、文件名每个单词或缩写的第一个字母必须大写。7.2、文件的命名也应达到见名知意,能够反映该文件所包含的内容。7.3、如果文件中仅包含一个主要封装体的相关内容,则该文件名应

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功