C++编码标准规范

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

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

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

资源描述

1.命名规则1.1.起个适当名字1.1.1.类名称(合用于C++)²类名称要能告诉咱们,这个类是什么。因而,类名称普通是名词。²类名字不需要告诉咱们,它从哪个类继承而来。²有时候加个后缀是很有用。例如类是一种代理(Agents)时,起名叫DownloadAgent更能表达真实意图。1.1.2.办法和函数名称(合用于C/C++)²办法和函数普通都要执行某种行为,因而,名称要能清晰阐明它做什么:CheckForErrors()而不是ErrorCheck(),DumpDataToFile()而不是DataFile()。这样也可以很容易区别函数和数据。²函数名总以动词开头,背面跟随其他名称。这样看起来更自然些。²可以加某些必要后缀:Max–表达取最大值Cnt–表达当前计数值Key–表达键值例如:RetryMax表达可接受最大数,RetryCnt表达当前接受数量。²前缀也同样有用:Is–用于询问某些问题。只要看到Is开头,就懂得这是一种查询。Get–用于获取一种值。Set–用于设立一种值。例如:IsHitRetryLimit.1.1.3.具有度量单位名称(合用于C/C++)²如果一种变量用于表达时间,重量或其他度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。例如:uint32mTimeoutMsecs;uint32mMyWeightLbs;1.1.4.缩写名称不要所有大写(合用于C/C++)²无论是什么缩写名称,咱们总以一种大写字母开头,背面跟随字母所有用小写。例如:classFluidOz;//而不是FluidOZclassNetworkAbcKey;//而不是NetworkABCKey1.2.类命名(合用于C++)²用大写字母作为单词分隔,每个单词首字母大写,其他字母均小写。²名字第一种字母应大写²不具有下划线('_')例如:classNameOneTwo;className;1.3.类库(或程序库)命名(合用于C/C++)²使用命名空间防止名字冲突。²如果编译器没有实现命名空间,需要用前缀来避名名字冲突,但是前缀不要过长(2个字母比较好)。例如:JohnJohnson完毕了一种数据构造库,它可以使用JJ作为库前缀,因此类名就象下面这样:classJjLinkList{}1.4.办法和函数命名(合用于C++)²使用与类名相似规则例如:classNameOneTwo{public:intDoIt();voidHandleError();}1.5.类属性命名(合用于C++)²属性(普通是非公有数据成员)名字以字母'm'开头。²在'm(m_)'背面,使用与类名相似规则。²'m(m_)'总是位于其他修饰符(如表达指针'p')前面。例如:classNameOneTwo{public:intVarAbc();intErrorNumber();private:intmVarAbc;intmErrorNumber;String*mpName;}1.6.办法和函数参数命名(合用于C++)²第一种字母必要小写。²第一种字母背面单词使用与类名相似规则。例如:classNameOneTwo{public:intStartYourEngines(Engine&rSomeEngine,Engine&rAnotherEngine);}1.7.局部变量命名(合用于C/C++)²所有字母都用小写²使用下划线'_'作为单词分隔。例如:intNameOneTwo::HandleError(interrorNumber){interror=OsErr();Timetime_of_error;ErrorProcessorerror_processor;}1.8.指针变量命名前缀(合用于C/C++)²指针变量多数状况应在前面加'p'。²星号'*'应接近类型,而不是变量名。例如:String*pName=newString;特别:String*pName,name;应提成两行来写:String*pName;Stringname;1.9.引用变量和返回引用函数命名前缀(合用于C++)²引用必要用'r'作前缀修饰。例如:classTest{public:voidDoSomething(StatusInfo&rStatus);StatusInfo&rStatus();constStatusInfo&Status()const;//这里返回是常量引用,因此不符合本规则private:StatusInfo&mrStatus;}1.10.全局变量命名前缀(合用于C/C++)²全局变量总是以'g(g_)'作为前缀。例如:Loggerg_Log;Logger*g_pLog;1.11.全局常量命名(合用于C/C++)²全局常量所有大写,并如下划线'_'分隔单词。例如:constintA_GLOBAL_CONSTANT=5;1.12.静态变量命名前缀(合用于C++)²静态变量以's'作为前缀。例如:classTest{public:private:staticStatusInfom_sStatus;}1.13.自定义类型(typedef)命名(合用于C/C++)²类型定义名称指是用typedef定义名称。²类型定义名称使用与类名相似规则,并使用Type作为后缀。例如:typedefuint16ModuleType;typedefuint32SystemType;1.14.宏定义命名(合用于C/C++)²所有单词字母都用大写,并使用下划线'_'分隔.例如:#defineMAX(a,b)blah#defineIS_ERR(err)blah1.15.C函数命名(合用于C/C++)²C++项目中,应尽量少用C函数。²C函数使用GNU规范,所有字母都使用小写,并用下划线'_'作为单词分隔。例如:intsome_bloody_function(){}²特别,为了赚容C/C++,在必要时候,在C++中应如下面格式定义C函数:extern“C”intsome_bloody_function();²或在C/C++中推荐使用下面格式:#ifdefcplusplusextern“C”{#endifintsome_bloody_function(){}#ifdefcplusplus}#endif1.16.枚举命名(合用于C/C++)²所有字母都大写,并用下划线'_'作为单词分隔。例如:enumPinStateType{PIN_OFF,PIN_ON};enum{STATE_ERR,STATE_OPEN,STATE_RUNNING,STATE_DYING};2.排版规则2.1.布局和模板2.1.1.类布局模板(合用于C++)²请使用下面模板来创立一种新类:/***用一行来描述类**#includeXX.hBR*-llib**类详细阐明**@seesomething*/#ifndefSORUTION_PROJECT_CLASSNAME_H#defineSORUTION_PROJECT_CLASSNAME_H//在这里包括系统头文献////在这里包括项目头文献////在这里包括局部头文献////在这里放置前置引用//classXX{public://类生命周期控制函数,如构造和析构,以及状态机/***Defaultconstructor.*/XX(void);/***Copyconstructor.**@paramfromThevaluetocopytothisobject.*/XX(constXX&from);/***Destructor.*/virtual~XX(void);//在这里放置类运算操作符/***Assignmentoperator.**@paramfromTHevaluetoassigntothisobject.**@returnAreferencetothisobject.*/XX&operator=(XX&from);//在这里放置类操作//在这里放置属性存取//在这里放置类状态查询protected:private:};//内联办法定义////外部引用//#endif//SORUTION_PROJECT_CLASSNAME_H²定义顺序是:public,protected,private²要清晰public/protected/private都应当放置哪些东西2.1.2.源文献格式(合用于C++)#includeXX.h//classimplemented///////////////PUBLIC/////////////////////////=================构造函数====================XX::XX(){}//XXXX::XX(constXX&){}//XXXX::~XX(){}//~XX//===============操作符=========================XX&XX::operator=(XX&);{return*this;}//=//==============类操作=====================//==============属性存取=====================//==============状态查询=====================/////////////PROTECTED///////////////////////////////PRIVATE//////////////////2.1.3.保护头文献不被重复包括(合用于C/C++)²应使用宏定义来保护头文献不被重复包括:#ifndefSORUTION_PROJECT_CLASSNAME_H#defineSORUTION_PROJECT_CLASSNAME_H#endif//SORUTION_PROJECT_CLASSNAME_H²如果使用命名空间时候,要把命名空间加到文献名前面:#ifndefSORUTION_PROJECT_NAMESPACE_CLASSNAME_H#defineSORUTION_PROJECT_NAMESPACE_CLASSNAME_H#endif2.1.4.办法和函数布局(合用于C/C++)²对于有较多参数函数写法如果参数较多,一行写不下,咱们应当提成几行来写,并且每个参数都另起一行对齐:intAnyMethod(intarg1,intarg2,intarg3,intarg4);或intAnyMethod(intarg1,intarg2,intarg3,intarg4);2.2.缩进、制表符以及空格(合用于C/C++)²缩进时候,每一层缩进3,4,或8个空格。(推荐使用4个空格)²不要使用TAB,用空格,大多数编辑器可以用空格代替TAB。TAB应固定4个空格,由于大多数编辑器都是这样设立。²虽然没有规定缩进层次,但是4至5层是适当。如果缩进层次太多,你也许需要考虑与否进行代码重构了。例如:voidfunc(){if(somethingbad){if(anotherthingbad){while(moreinput){}}}}2.3.尽量使一行不要超过78个字母(合用于C/C++)²有许多编辑器屏幕只有78个字母宽2.4.保证一行只写一条语句(合用于C/C++)²一行最多只写一条语句²一行只定义一种变量例如:不要象下面这样:char**a,*x;intwidth,height;//widthandheightofimage要象这样:char**a=0;//文档阐明char*x=0;//文档阐明2.5.花括号{}规则(合用于C/C++)2.5.1.花括号位置²在核心字下一行单独放置括号,并且与核心字对齐,如:if(condition){...}while(condition){…}2.5.2.什么时候应使用花括号所有if,while和do语句,要么用单行格式,要么使用花括号格式。²使用花括号格式:if(1==somevalue){somevalue=2;}²单行格式:if(1==someva

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

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

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

×
保存成功