您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Unix C语言编程规范
UnixC语言编程规范宇信易诚科技有限公司业务支持部何轼UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织排版统一的缩进风格if(LockCount0&&LckHandle!=NULL){if((*LckHandle=AllocLockHandle(Key,LockCount))0)returnSHMRC_LCKRES;if(LockNum=0){if(LockWrite(*LckHandle,LockNum)!=0){FreeLockHandle(*LckHandle);returnSHMRC_LCKOP;}}}排版适当的空行if(Service==NULL)Port=0;elseif((Serv=getservbyname(Service,tcp))!=NULL)Port=Serv-s_port;ElsePort=htons(atoi(Service));bzero(SockAddr,sizeof(structsockaddr_in));SockAddr-sin_family=AF_INET;SockAddr-sin_addr=Addr;SockAddr-sin_port=Port;排版避免过长的语句行if(SQLGetDiagRec(HdlType,Handle,i,SqlState,&NativeError,SqlMsg,sizeof(SqlMsg),&MsgLen)!=SQL_SUCCESS)return;if(MsgFlag!=0)LogMsg(LOGLEVEL_ERROR,ERRINFO,%s%s%s:”“SQLSTATE=[%s],Native=[%d],Msg=[%.*s],(ErrLabel!=NULL?ErrLabel:),(ErrLabel!=NULL?(Message!=NULL?–“:):(Message!=NULL?:DBERR)),(Message!=NULL?Message:),SqlState,(int)NativeError,(int)MsgLen,SqlMsg);排版禁止多语句行switch(*Fmt){caseDBDTFMT_PREFIX:p++;break;caseDBDTFMT_YEAR:p+=DBDTSZ_YEAR;break;caseDBDTFMT_MONTH:p+=DBDTSZ_MONTH;break;caseDBDTFMT_DAY:p+=DBDTSZ_DAY;break;default:p+=2;}排版操作符前后的空格分隔if(Work0&&DatMsg.Run0){Work=DatMsg.Run*Limit/Work;if(WorkDatMsg.Cnt+1||WorkDatMsg.Cnt-1)if(SetData(Work)!=0)return-1;}UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织注释注释格式要尽量统一//客户化接口常数#defineCUSTRC_RESUME-1//结果:重置#defineCUSTRC_NORMAL0//结果:正常#defineCUSTRC_BYPASS1//结果:略过#defineFLAG_TRUE'Y‘//标志:真#defineFLAG_FALSE'N‘//标志:假#defineNULDEV/dev/null“//空设备名注释文件和函数的头部要有注释//++++++++++++++++++++++++++++++++++++++++++++++++++++++//文件名称:wft.h//文件内容:工作流程工具库客户化接口头文件//文件作者:何轼//版本历史://2009.01.09创建//++++++++++++++++++++++++++++++++++++++++++++++++++++++//======================================================//数据长度定义#defineSZ_DB_APP8//应用系统简称注释语句的注释要放在上方或右侧//未中断处理if(Flag==0){CheckDelete();//检查并处理被清除的任务CheckBreak();//处理被中断的任务CheckRepool();//检查并处理重新排队的任务CheckNew();//检查并处理新任务CheckIni();//检查并处理初始化完成任务RunActions();//执行队列中的活动}注释注释内容与所描述内容进行同样缩排//获取中断标志if(Flag==0){//检查结束标志Flag=wfCheckModule(MODULE_CORE);if(Flag!=0){//中止当前所有活动KillActions();}}注释避免在语句行的中间插入注释TotalSpace//总空间大小=CtrlSpace//控制区大小+NodeSpace//节点区大小+BoxSpace//邮箱区大小+MsgSpace//消息区大小+ReqSpace//请求区大小+QueueSpace//队列区大小+BlockSpace;//分块区大小UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织可读性尽量使用完整的单词或易理解缩写命名BA-BMM=BMM;BA-BMR=BMR;BA-BMB=BMB;BA-BlockSize=BlockSize;BA-NodeList=VMBNULL;BA-BoxList=VMBNULL;BA-OutList=VMBNULL;可读性命名规则统一MaxNodes=GetCfgNumber(CfgFile,CFGKEY_MAXNODES,MAXNODES_DFL,MAXNODES_MIN,MAXNODES_MAX);max_boxes=GetCfgNumber(CfgFile,CFGKEY_MAXBOXES,MAXBOXES_DFL,MAXBOXES_MIN,MAXBOXES_MAX);maxMsgs=GetCfgNumber(CfgFile,CFGKEY_MAXMSGS,MAXMSGS_DFL,MAXMSGS_MIN,VALUE_NOLIMIT);Max_Reqs=GetCfgNumber(CfgFile,CFGKEY_MAXREQS,MAXREQS_DFL,MAXREQS_MIN,VALUE_NOLIMIT);可读性避免使用默认运算优先级if(isdigit(vChrBuf[0])||vChrBuf[0]=='‘||vChrBuf[0]=='-‘||(vChrBuf[0]=='.‘&&Field-SubLen==0))returnVVAL_FALSE;可读性尽量使用枚举或宏来代替数字if(SQLCODE==100){printf(ERROR:%d\n,SQLCODE);return-3;}if(SQLCODE==SQLNOTFOUND){printf(ERROR:%d\n,SQLCODE);returnERR_DBOP;}可读性不使用技巧很高的难懂的语句for(Length=0;*pSource;Length++)*pDestin++=*pSource++;for(Length=0;*pSource!=0;Length++){*pDestin=*pSource;pSource++;pDestin++;}UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织变量和函数杜绝非公用目的的公共变量和函数intFlag;intCheckState(charState){return(State==‘Y’?0:-1);}staticintFlag;staticintCheckState(charState){return(State==‘Y’?0:-1);}变量和函数明确函数参数合法性的检查责任staticintCheckName(char*Name){if(Name==NULL)return-1;Node-Name=Name;return0;}staticvoidSetNodeName(char*Name){if(Name!=NULL)CheckName(Name);}变量和函数函数的规模尽量控制在100行内staticvoidInitialData(void){……}staticvoidKernelProcess(void){InitialData();……}变量和函数一个函数仅完成一个功能staticvoidCalculateData(void){//读取账务信息……//接收行情信息……//更新库存信息……}变量和函数尽量减少参数的个数staticvoidDoTxn(intSeq,char*CurBuy,char*CurSale,doublePrice,doubleAmount,char*Account,char*Password){……}staticvoidDoTxn(intSeq,TXNDATA*Txn,ACCOUNT*Account){……}UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织效率局部效率服从于全局效率typedefstruct{charCommand[SZ_COMMAND];charDataSize[SZ_DATASIZE];charDataValue[SZ_DATAVALUE];}PKG_CMD;效率调整结构以提高空间效率typedefstruct{charFlag;intCount;charDescription[SZ_DESC];doubleValues[SZ_MAXVAL];}VALUE_T;typedefstruct{charFlag;charDescription[SZ_DESC];intCount;doubleValues[SZ_MAXVAL];}VALUE_T;效率简化循环以提高时间效率for(i=0;i1000;i++){if(Flag==0)Func1();elseFunc2();}if(Flag==0)for(i=0;i1000;i++)Func1();elsefor(i=0;i1000;i++)Func2();效率多重循环时将循环次数多的放在内层for(i=0;i1000;i++){for(j=0;j5;j++){Data[i][j]=0;}}for(j=0;j5;j++){for(i=0;i1000;i++){Data[i][j]=0;}}UnixC语言编程规范排版注释可读性变量和函数效率质量保证编辑与编译目录组织质量保证在哪里申请内存就在哪里释放内存staticvoidFunc1(void){char*p;if((p=malloc(1000))!=NULL){Func2(p);free(p);}}staticvoidFunc2(char*p){……}质量保证在哪里打开文件就在哪里关闭文件staticvoidFunc1(void){FILE*f;if((f=fopen(FILENAME,”r”))!=NULL){Func2(f);fclose(f);}}staticvoidFunc2(FILE*p){……}质量保证防范内存越界sprintf(StrBuf,”%s:%d”,Description,Number);strcpy(WorkBuf,InValue);snprintf(StrBuf,sizeof(StrBuf),”%s:%d”,Description,Number);strncpy(WorkBuf,InValue,sizeof(WorkBuf)/sizeof(char));质量保证变量使用前必须赋值memset(Buffer,0,sizeof(Buffer);strcpy(Buffer,InStr);质量
本文标题:Unix C语言编程规范
链接地址:https://www.777doc.com/doc-3285527 .html