您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 研发中心_产品一部_C++编码规范
北京山海经纬信息技术有限公司产品一部C++编码规范更新时间:2009.07版本:V2.0.0.0发布人:李欣1.目标保证程序清晰易读,易于维护,保证产品的可持续性发展养成良好的编程习惯,减少出错的可能性,提升产品质量(代码是一项艺术品,程序员是一个专业人员,一个好的习惯利于人利于己)2.总体原则代码要简洁、易懂、美观风格要统一、一致3.编码规范1)代码的对齐与缩进描述:这是一项美观性方面的要求,但实际上很大程度影响着代码的可读性。具体要求:同一级别代码要垂直对齐不同级别代码要有正确的缩进,缩进应使用Tab键。起始与终止的花括号“{}”应具有相同的缩进距离,并且均各自处于单独一行,该行不应有其它代码。示例:voidCTestDlg::OnButton1(){inti=0;}if(pDBDriver==NULL)return;if(pDBDriver==NULL){MessageBox(failed);return;}try{......}catch(longerrCode){}while(pDBDriver-FetchRecord(rec)==S_OK){longid;pDBDriver-GetField_Int32(rec,0,&id);}while(pDBDriver-FetchRecord(rec)==S_OK){if(++count600000)continue;longid;pDBDriver-GetField_Int32(rec,0,&id);if(count=600100)break;}for(j=0;j100;j++){pClob[j]='A'+(j%26);}switch(type){case0:{......}break;case1:{......}break;case2:{......}break;}typedefenum{EnumRWM_Unknown=0,//unknownEnumRWM_Append,//appendrecordEnumRWM_Update,//updaterecordEnumRWM_Delete,//deleterecord}EnumRecordWriteMode;enumEnumType{a=1,b=2,};classCLog{public:virtualvoidWriteLog(constchar*pLine)=0;virtualvoidWriteText(constchar*pText)=0;};2)代码中的空行描述:代码中合理的空行同样保证程序的清晰易读。代码简洁不意味着要删除空行,行数的多少与代码是否简洁无关具体要求:在函数体与函数体之间应有空行在一个函数体内部,应有合适的空行,表示函数体功能的实现是分步进行的在头文件中声明函数或者变量时,相互无关的函数或变量声明之间通常应有空行相互关联紧密的语句之间不要有空行,如elseif与elseif之间不能有空行。一般不应有两个以上连续的空行出现示例:classCEzRuleLength:publicCEzRule{public:CEzRuleLength();virtual~CEzRuleLength();public:virtualEnumEzRuleTypeGetType();virtualEnumEzRuleCatGetCategory();virtualvoidGetName(char*pName);virtualvoidPrepare(void*pDBCnn,longDBCnn);virtualboolCheckRecord(CEzRecordset*pRecordset,longindex);virtuallongGetSupportFieldType();private:intm_iMinLength;intm_iMaxLength;};EnumEzRuleTypeCEzRuleLength::GetType(){returnenum_EzRT_Prop_Length;}EnumEzRuleCatCEzRuleLength::GetCategory(){returnenum_EzRC_Prop;}//开始检查boolbPass=true;intfc=m_arrFieldIndex.size();for(inti=0;ifc;i++){CFieldValue*pFV=pRecord-GetFieldValue(m_arrFieldIndex[i]);if(pFV-bIsNull)continue;if((pFV-type&GetSupportFieldType())==0){charmsg[MAX_RULE_NAME+512];sprintf(msg,规则\%s\应用的字段\\类型不正确,无法检查,m_strUserName,m_arrApplyField[i].c_str());stException*p=newstException(EnumError_Failed,__LINE__,__FILE__,msg,0);throwp;}intlength=0;switch(pFV-type){caseEnumFType_Int8:caseEnumFType_Int16:caseEnumFType_Int32:caseEnumFType_Int64:{charbuf[64];if(pFV-type==EnumFType_Int8)itoa(pFV-btValue,buf,10);elseif(pFV-type==EnumFType_Int16)itoa(pFV-sValue,buf,10);elseif(pFV-type==EnumFType_Int32)itoa(pFV-lValue,buf,10);else_i64toa(pFV-i64Value,buf,10);intsize=strlen(buf);for(inti=0;isize;i++){if(isdigit(buf[i]))length++;}}break;caseEnumFType_String:{length=strlen(pFV-pText);}break;}if(lengthm_iMinLength||lengthm_iMaxLength){bPass=false;break;}}3)代码中的换行描述:过长的代码很难阅读,需要适当的换行。一些合理的换行可大大提升代码可读性。具体要求:过长的字符串常量可以换行过长的条件判断语句、函数调用可以换行当一个函数参数很多时,为了清晰注释每个参数含义,也可每个参数单独一行换行的位置在“&&”、“||”、“+”、“-”、“*”、“/”,“,”等之后。换行均应缩进。但不要把两个很短的语句放在同一行(如在一行中:min=100;max=0;)。示例:return(EnumFType_Int8|EnumFType_Int16|EnumFType_Int32|EnumFType_Int64|EnumFType_String);sprintf(pBuf,警告:%s,代码:%d,描述:%s,出错模块ID:%d,文件:%s,行号:%d\r\n,pText,pException-code,pException-desp,pException-ModuleID,fname,pException-linenumber);if((st&EnumProcStatus_NeedInput)!=0&&target.iTargetInputIndex==input)if((status&EnumProcStatus_NeedInput)!=0||(status&EnumProcStatus_NeedInputRestart)!=0){}constchar*pStr=TheMSDNLibraryistheessentialreferencefordevelopers,withmorethan1.5gigabytesoftechnicalprogramminginformation,samplecode,;4)代码中的空格描述:适当的空格提升代码可读性,因此推荐在代码中使用合理的空格。具体要求:“+”、“-”、“*”、“”、“&&”、“&”等运算符两侧推荐使用空格隔开函数调用时各个参数之间推荐使用空格隔开只用一个空格进行隔开示例:if((pFV-type&GetSupportFieldType())==0){charmsg[MAX_RULE_NAME+512];sprintf(msg,规则\%s\应用的字段\\类型不正确,无法检查,m_strUserName,m_arrApplyField[i].c_str());stException*p=newstException(EnumError_Failed,__LINE__,__FILE__,msg,0);throwp;}5)注释的添加描述:注释描述代码的意图。具体要求:注释用于描述代码的意图,不是用于将代码注释掉,没有用的代码要删除,不存在模棱两可的代码。一个类的注释应在头文件中,类的声明之前进行注释。一个类的成员变量应在头文件中进行注释,一般在成员变量声明的前一行加注释,并且后面应空行。一个类的成员函数一般在cpp文件中进行注释,注释内容包括函数的意图、参数的含义、返回值的含义、是否抛出异常、供谁调用、调用前要求等等。If/elseif/case等函数体中局部变量的注释可以直接写在局部变量声明的后面,位于同一行。函数比较复杂时,可以分步骤增加注释,以便处理过程清晰易懂。如果变量的含义可以从名称上很明显获得,可以不加注释;如果返回值含义可以从类型上或者函数名称上很明显获得,可以不加注释;当使用一个整型、不同数值代表不同含义时,此时必须增加注释清晰说明。示例:public://约束方式//0:第n级代码长度为前面级别定义的所有代码长度之和,默认//例如01,01002,010020001,分别为三个级别的代码//1:第n级代码长度为第n级定义的代码长度//例如01,002,0001,分别为三个级别的代码longm_iClassType;////代码是否已被使用//boolCDlgStdCodeDefine::IsCodeUsed(DBDrv::IDBDriver*pDBDriver,longDBCnn,LPCTSTRlpszCode,longStdID){////getthisformatadaptercapability,returnEnumAdapterCap//longCShpAdapter::GetCap(){return(EnumCap_CanRead|//是否支持读取EnumCap_CanWrite|//是否支持写入EnumCap_IsGeoFormat|//是否可存空间数据EnumCap_HasProjection|//是否具有投影信息EnumCap_CanUpdate|//是否支持对现有数据更新EnumCap_HasAttribute|//是否支持属性EnumCap_CanIndexRecord|//支持索引记录EnumCap_CanUpdateRecord|//支持更新记录EnumCap_CanExecuteSQL|//支持sql查询EnumCap_CanAppend);}if(m_hShape==NULL||m_hDBF==NULL){stException*p=newstException(EnumError_NotOpen,__LINE__,__FILE__,数据未打开,m_ID);throwp;}bHasFilter=false;//donotsupportsqlfilterif(m_iRecordIndex=m_iTotalRecordCount){bReachEnd=true;return;}bReachEnd=false;CRecord*pRecord=newCRecord();//getsha
本文标题:研发中心_产品一部_C++编码规范
链接地址:https://www.777doc.com/doc-3575186 .html