首页 C++ 编程规范

C++ 编程规范

举报
开通vip

C++ 编程规范C/C++编程规范宁波市科技园区瀑布软件有限公司一.内存开辟方面的注意事项。1.凡是开辟内存空间,均要加上检查是否开辟空间成功的语句;凡是成功开辟内存空间后在使用完毕后都要释放所开辟的内存空间。具体来说就是配对使用,有一个malloc,就应该有一个free。(C++中对应为new和delete)。2.尽量在同一层上使用,不要像上面那种,malloc在函数中,而free在函数外。最好在同一调用层上使用这两个函数。malloc分配的内存一定要初始化。free后的指针一定要设置为NULL,以免成为野指针。二.变量使用。3...

C++ 编程规范
C/C++编程规范宁波市科技园区瀑布软件有限公司一.内存开辟方面的注意事项。1.凡是开辟内存空间,均要加上检查是否开辟空间成功的语句;凡是成功开辟内存空间后在使用完毕后都要释放所开辟的内存空间。具体来说就是配对使用,有一个malloc,就应该有一个free。(C++中对应为new和delete)。2.尽量在同一层上使用,不要像上面那种,malloc在函数中,而free在函数外。最好在同一调用层上使用这两个函数。malloc分配的内存一定要初始化。free后的指针一定要设置为NULL,以免成为野指针。二.变量使用。3.变量一定要初始化才能使用。4.指针变量和零比较要使用==NULL或!=NULL,布尔变量和零比较要使用if(flag)或if(!flag)三.注释要求。声明:下面两条知道就行了,不用深究或者照搬,我估计每个公司都有不同的注释标准。5.在对于要提交 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 或者工作中的C/C++的文件,文件头应该有类似这样的注释://**************************************************************************************////Copyright@2006-2007,NingboCascadeSoftwareLtd.,Co.AllRightsReserved.////Filename:CBroadcaster.cpp////Author:YinZhou////Created:07/25/2007////Purpose:ImplementationofCBroadcaster.h////***************************************************************************************6.对于提交报告或者工作中的函数来说,应该也有类似于这样的注释://**************************************************************************************////Function:CreateDispatcher////Author:YinZhou////Created:07/25/2007////Purpose:Createanewdispatcherusingtheuriasname////Parameters:uri[IN]---thenameofthedispatcher////Return:thenewlycreateddispatcher////Procedure:createthedispatcher,inititandinsertitintothem_dispatchrMap////LastModifiedby:YinZhou////***************************************************************************************四.编码的良好风格。7.有效利用空格。如将ha=(ha*128+*key++)%tabPtr->size;变成ha=(ha*128+*key++)%tabPtr->size;8.语句中要在各个操作符间加空格,函数调用时,要以各个参数间加空格。9.不要把语句都写在一行上,函数参数多的时候,最好也换行。10.空行可以区分不同的程序块,程序块间,最好加上空行。11.用TAB键对齐你的一些变量的声明或注释,一样会让你的程序好看一些。把编辑器的配置设成一个Tab等于4个空格。12.所有传进函数的指针都必须用断言(assert)判断是否非空。13.写有参数的函数时,首要工作,就是要对传进来的所有参数进行合法性检查。而对于传出的参数也应该进行检查,这个动作当然应该在函数的外部,也就是说,调用完一个函数后,应该对其传出的值进行检查。14.对系统调用的返回进行判断。比如下面的例子:fp=fopen("log.txt","a"); if(fp==NULL){  printf("Error:openfileerror\n");  returnFALSE; }15.在可能涉及到错误处理是应首先使用if语句进行错误处理。16.在多个C文件include同一个头文件时,应头文件的内容都放在#ifndef和#endif中,这样不管你的头文件会不会被多个文件引用管你的头文件会不会被多个文件引用。17.H文件中是declare(声明),C文件中是define(定义),不要把函数写在H文件。18.带初始化的全局变量不要放在H文件中。19.应统声明出错代码和出错信息。如下例:/*声明出错代码*/ #define ERR_NO_ERROR 0/*Noerror     */ #define ERR_OPEN_FILE 1/*Openfileerror   */ #define ERR_SEND_MESG 2/*sendingamessageerror*/ #define ERR_BAD_ARGS 3/*Badarguments    */ #define ERR_MEM_NONE 4/*Memeroyisnotenough */ #define ERR_SERV_DOWN 5/*Servicedowntrylater */ #define ERR_UNKNOW_INFO6/*Unknowinformation  */ #define ERR_SOCKET_ERR7/*Socketoperationfailed*/ #define ERR_PERMISSION8/*Permissiondenied  */ #define ERR_BAD_FORMAT9/*Badconfigurationfile */ #define ERR_TIME_OUT 10/*Communicationtimeout */ /*声明出错信息*/ char*errmsg[]={  /*0*/  "Noerror",  /*1*/  "Openfileerror",  /*2*/  "Failedinsending/receivingamessage",  /*3*/  "Badarguments",  /*4*/  "Memeroyisnotenough",  /*5*/  "Serviceisdown;trylater",  /*6*/  "Unknowinformation",  /*7*/  "Asocketoperationhasfailed",  /*8*/  "Permissiondenied",  /*9*/  "Badconfigurationfileformat",  /*10*/  "Communicationtimeout",  /*10*/  "Communicationtimeout", };也没有必要把所有的输出都放到errmsg中,抽取比较重要的出错信息或是提示信息是其关键。20.应注意把循环体内的共性操作抽取出来,如下例:for(i=0;i<1000;i++){  GetLocalHostName(hostname);  ... }GetLocalHostName的意思是取得当前计算机名,在循环体中,它会被调用1000次啊。这是多么的没有效率的事啊。应该把这个函数拿到循环体外,这样只调用一次,效率得到了很大的提高。21.在简单的控制台程序中所有需要进行输入时都要有所提示。22.对于常用函数中的不变量,最好声明为声明成static,当函数再次被调用时,就会省去了分配内存的开销,执行效率也很好。23.好的变量名或是函数名A.直观并且可以拼读,可望文知意,不必“解码”。我的做法是变量名一般采用英文 单词 英语单词 下载七年级上册英语单词表下载英语单词表下载深圳小学英语单词表 下载高中英语单词 下载 ,尽量做到见名知意,首字母大写B.名字的长度应该即要最短的长度,也要能最大限度的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达其含义。C.不要全部大写,也不要全部小写,应该大小写都有,如:GetLocalHostName或是UserAccount。D.可以简写,但简写得要让人明白,如:ErrorCode->ErrCode,ServerListener->ServLisner,UserAccount->UsrAcct等。E.为了避免全局函数和变量名字冲突,可以加上一些前缀,一般以模块简称为前缀。F.全局变量统一加一个前缀或是后缀,让人一看到这个变量就知道是全局的。G.与标准库(如:STL)或开发库(如:MFC)的命名风格保持一致。H.所有类名以C开头,所有变量名以m_开头,变量名开头为小写。类名和函数名开头为大写。如CSegmentBuffer,m_buffer,ReadBuffer()…24.修改别人程序时不要直接在别人程序修改,如果你觉得别人的程序有所不妥,请注释掉。如下所示:/* *-----commentedbyhaoel2003/04/12------ * * char*p=(char*)malloc(10); * memset(p,0,10); */ /*------Addedbyhaoel 2003/04/12-----*/ char*p=(char*)calloc(10,sizeofchar); /*----------------------------------------*/ * char*p=开始使劲)malloc(10); * memset(p,0,10); */ /*------Addedbyhaoel 2003/04/12-----*/ char*p=(char*)calloc(10,sizeofchar); /*----------------------------------------*/25.把相同或近乎相同的代码形成函数和宏。26.为准确表达各个操作符的优先级,最好在表达式中多加一些括号。27.对于一些函数中的指针参数,如果在函数中只读,请将其用const修饰,这样,别人一读到你的函数接口时,就会知道你的意图是这个参数是[in],如果没有const时,参数表示[in/out],注意函数接口中的const使用,利于程序的维护和避免犯一些错误。28.函数的参数个数最好不要太多,一般来说6个左右就可以了,而且最好使用结构struct来传递参数,因为使用结构struct来传递参数,就可以不管参数的顺序,而且,函数很容易被修改,如果需要给函数增加参数,不需要更改函数接口,只需更改结构体和函数内部处理,而对于调用函数的程序来说,这个动作是透明的。29.不要省略函数的返回类型,对于void的函数,也应加上return语句。另外参数的个数为零时也应标注为void,如voidregist(void)。30.强烈建议不要使用goto语句。31.使用宏时参数一定要加上括号。32.谨慎选择使用宏还是函数。宏的执行很快(因为没有函数调用的开销),但宏会让源代码澎涨,使目标文件尺寸变大,这样程序执行得更慢。33.static最大的用处是控制访问,在C中如果一个函数或是一个全局变量被声明为static,那么,这个函数和这个全局变量,将只能在这个C文件中被访问,如果别的C文件中调用这个C文件中的函数,或是使用其中的全局(用extern关键字),将会发生链接时错误。这个特性可以用于数据和程序保密。34.一个函数完成一个具体的功能,一般来说,一个函数中的代码最好不要超过600行左右,越少越好,最好的函数一般在100行以内,300行左右的孙函数就差不多了。35.函数一般是完成一个特定的功能,千万忌讳在一个函数中做许多件不同的事。函数的功能越单一越好,一方面有利于函数的易读性,另一方面更有利于代码的维护和重用,功能越单一表示这个函数就越可能给更多的程序提供服务,也就是说共性就越多。36.注意使用typedef给类型起别名,这样可以使所有的程序中的类型声明都显得那么简洁和清淅,而且易于维护。37.为常量声明宏,最好不要在程序中出现数字式的“硬编码”,如:intuser[120];将120定义为宏Length,这样可以一改百改,而且也很利于程序阅读。38.条件语句中,并非所有的语句都会执行,当你的条件语句非常多时,这点要尤其注意。例如使用||和&&进行条件判断时。39.基本上来说,for可以完成while的功能,我是建议尽量使用for语句,而不要使用while语句。如:p=pHead; p=pHead; while(p){  ...  ...  p=p->next; }当while的语句块变大后,你的程序将很难读,用for就好得多: for(p=pHead;p;p=p->next){ .. }一眼就知道这个循环的开始条件,结束条件,和循环的推进。大约就能明白这个循环要做个什么事?而且,程序维护进来很容易,不必像while一样,在一个编辑器中上上下下的捣腾。40.请sizeof类型而不是变量名。因为sizeof变量名往往很容易出错。41.不但要改正每个error,还要修正每个warning。这是一个有修养的程序员该做的事。42.书写Debug版和Release版的程序。43.程序在开发过程中必然有许多程序员加的调试信息。我见过许多项目组,当程序开发结束时,发动群众删除程序中的调试信息,何必呢?为什么不像VC++那样建立两个版本的目标代码?一个是debug版本的,一个是Release版的。那些调试信息是那么的宝贵,在日后的维护过程中也是很宝贵的东西,怎么能说删除就删除呢?利用预编译技术吧,如下所示声明调试函数:#ifdefDEBUG  voidTRACE(char*fmt,...)  {    ......  } #else  #defineTRACE(char*fmt,...) #endif于是,让所有的程序都用TRACE输出调试信息,只需要在在编译时加上一个参数“-DDEBUG”,如: cc-DDEBUG-otargettarget.c于是,预编译器发现DEBUG变量被定义了,就会使用TRACE函数。而如果要发布给用户了,那么只需要把取消“-DDEBUG”的参数,于是所有用到TRACE宏,这个宏什么都没有,所以源程序中的所有TRACE语言全部被替换成了空。一举两得,一箭双雕,何乐而不为呢? 顺便提一下,两个很有用的系统宏,一个是“__FILE__”,一个是“__LINE__”,分别表示,所在的源文件和行号,当你调试信息或是输出错误时,可以使用这两个宏,让你一眼就能看出你的错误,出现在哪个文件的第几行中。这对于用C/C++做的大工程非常的管用。44.exit(0)多用于因人为输入或程序异常时候的退出,return则用于正常的返回或退出。比如某程序需要打开一个文件,如果可以正常打开并且处理完毕,就用return0结束,如果文件没能打开,用exit(0)结束程序,这样,看原代的时候,就明白什么时候是按照希望的结果退出,什么时候是出现异常退出的了。45.输出内容的时候,尽量加一些getch()或者空循环,这样可以方便看到输出结果。
本文档为【C++ 编程规范】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥17.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中式烹调师
暂无简介~
格式:doc
大小:43KB
软件:Word
页数:14
分类:互联网
上传时间:2022-07-06
浏览量:8