《(完整)C++编码规范.docx》由会员分享,可在线阅读,更多相关《(完整)C++编码规范.docx(21页珍藏版)》请在第一文库网上搜索。
1、1 .命名规则1.1. 起个合适的名字1.1.1. 类的名称(适用于C+)2 类的名称要能告诉我们,这个类是什么。因此,类的名称通常是名词.3 类的名字不需要告诉我们,它从哪个类继承而来的。2有时候加个后缀是很有用的。比如类是一个代理(Age1TtS)时,起名叫DownIOadAgent更能表达真实的意图。1.1.2.方法和函数的名称(适用于C/C+)2方法和函数通常都要执行某种行为,因此,名称要能清楚的说明它做什么:CheckForErrors()而不是ErrOrCheCk(),DumpDataToFiIe()而不是DataFiIeOo这样也可以很容易的区别函数和数据。2函数名总以动词开头,
2、后面跟随其它名称。这样看起来更自然些。2可以加一些必要的后缀:Max-表示取最大值Cnt-表示当前的计数值Key-表示键值例如:RetryMax表示可接收的最大数,RetryCnt表示当前接收的数量.2前缀也同样有用:Is-用于询问一些问题。只要看到IS开头,就知道这是一个查询.Get-用于获取一个值。Set-用于设置一个值。例如:ISHitRetry1imit.1.1.3.含有度量单住的名称(适用于C/C+)2如果一个变量用于表示时间,重量或其它度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。例如:uint32mTimeoutMsecs;uint32RiMyWeight1b
3、s;1.1.4.缩写名称不要全部大写(适用于C/C+)2无论是什么缩写名称,我们总以一个大写字母开头,后面跟随的字母全部用小写。例如:c1assFIuidOz;/而不是FIuidOZcIassNetworkAbcKey;/而不是NetworkABCKey1.2.类的命名(适用于C+)2用大写字母作为单词的分隔,每个单词的首字母大写,其它字母均小写。2名字的第一个字母应大写2不含有下划线()例如:c1assNameOneTwo;cIassName;1.3.类库(或程序库)命名(适用于C/C+)2使用命名空间防止名字冲突.2如果编译器没有实现命名空间,需要用前缀来避名名字冲突,不过前缀不要过长(2
4、个字母比较好)。例如:JohnJohnson完成了一个数据结构的库,它可以使用JJ作为库的前缀,所以类名就象下面这样:c1assJJ1ink1ist()1.4o方法和函数的命名(适用于C+)2使用与类名相同的规则例如:cIassNameOneTwo(pubIic:intDoItO;voidHandIeError();)1.5o类属性的命名(适用于C+)2属性(通常是非公有数据成员)名字以字母m开头.2在m(mj后面,使用与类名相同的规则。2,m(mj,总是位于其它修饰符(如表示指针的p)的前面。例如:cIassNameOneTwopubIic:intVarAbcO;intErrorNumber
5、();private:intmVarAbc;intmErrorNumber;String*mpName:1.6o方法和函数参数的命名(适用于C+)2第一个字母必须小写。2第一个字母后面的单词使用与类名相同的规则.例如:cIassNameOneTwo(pubIic:intStartYourEngines(Engine&rSomeEngine,Engine&rAnotherEngine);)1.7o局部变量的命名(适用于CC+)2所有字母都用小写2使用下划线作为单词的分隔.例如:intNameOneTwo::HandIeError(interrorNumber)(interror=OsErr();
6、Timetime_of_error;ErrorProcessorerror_processor;11.8o指针变量的命名前缀(适用于C/C+)2指针变量多数情况应在前面加,p,o2星号应靠近类型,而不是变量名。例如:String*pName=newString;特别的:String*pName,name;应分成两行来写:String*pName;Stringname;1.9o引用变量和返回引用函数的命名前缀(适用于C+)2引用必须用产作前缀修饰。例如:c1assTest(pubIic:voidDoSomething(StatusInfo&rStatus);StatusInfo&rStatus(
7、);ConstStatusInfoSStatus()const;/这里返回的是常量引用,所以不符合本规则private:StatusInfo&mrStatus;)1.10o全局变量的命名前缀(适用于C/C+)2全局变量总是以,g(gj,作为前缀。例如:1oggerg_1og;1ogger*g_p1og:1.11.全局常量的命名(适用于C/C+)2全局常量全部大写,并以下划线分隔单词。例如:constintA_G1OBA1_CONSTANT=5;1.12.静态变量的命名前缀(适用于C+)2静态变量以s作为前缀。例如:c1assTestpubIic:private:StaticStatusInfo
8、m_sStatus;)1.13.自定义类型(typedef)的命名(适用于CC)2类型定义名称指的是用typedef定义的名称.2类型定义名称使用与类名相同的规则,并使用TyPe作为后缀.例如:typedefuint16ModuIeType;typedefuint32SystemType;1.14.宏定义的命名(适用于C/C+)2所有单词的字母都用大写,并使用下划线分隔.例如:#defineMAX(a,b)b1ah#defineIS_ERR(err)bIah1.15.C函数的命名(适用于C/C+)2c+项目中,应尽量少用c函数.2C函数使用GNU规范,所有字母都使用小写,并用下划线作为单词的分
9、隔。例如:intsome_bIoody_function()特别的,为了赚容C/C+,在必要的时候,在C+中应以下面的格式定义C函数:externCintsome_bIoody_function();2或在CC+中推荐使用下面的格式:# ifdef_cpIuspIus_externC”#endifintsome_bIoody_function()()# ifdef_cpIuspIus_)# endif1.16o枚举的命名(适用于CC+)2所有字母都大写,并用下划线作为单词分隔。例如:enumPinStateType(PIN_OFF,PIN_ON:enumSTATE_ERR,STATE_OPEN
10、,STATE_RUNNING,STATE-DYING;2. 排版规则2.1. 布局和模板2.1.1. 类的布局模板(适用于C+)2请使用下面的模板来创建一个新的类:/* 用一行来描述类* #inc1ude”XX.h”*IIib*类的详细说明*SeeSOmething*/# ifndefSORUTION_PROJECT_C1ASSNAME_H# defineSORUTION_PROJECT_C1ASSNAME_H/在这里包含系统头文件/在这里包含项目头文件/在这里包含局部头文件/在这里放置前置引用/c1assXXpubIic:/类的生命周期控制函数,如构造和析构,以及状态机/*Defau1tco
11、nstructoro*/XX(void);*Copyconstructor.*paramfromThevaIuetocopytothisobject.*/XX(constXX&from);*Destructoro*/virtuaIXX(void);/在这里放置类的运算操作符*Assignmentoperator.*paramfromTHevaIuetoassigntothisobject.*returnAreferencetothisobject.*/XX&operator=(XX&from);/在这里放置类的操作/在这里放置属性存取/在这里放置类的状态查询protected:private:
12、1;/内联方法定义/夕卜部弓I用/#endif/SORUTI0N_PR0JECT_C1ASSNAME_H2定义的顺序是:pubIic,protected,private2要清楚pubIic/protected/private都应该放置哪些东西2.1.2. 源文件格式(适用于C+)#inc1ude”XX。h/c1assimpIemented/PUB1IC/*勺,/攵XX::XX()(/XXXX:XX(constXX&)(/XXXX::XX()()/xx/操作=XX&XX:operator=(XX&);return*this;)/=/=类的操作/二二二二二二二二二二二二属性存取/二二二=二=二二二
13、=二月Fio/PROTECTED/PRIVATE/2.1.3. 保护头文件不被重复包含(适用于C/C+)2应使用宏定义来保护头文件不被重复包含:#ifndefSORUTION_PROJECT_C1ASSNAME_H#defineSORUTION_PROJECT_C1ASSNAME_H#endif/SORUTION_PROJECT_C1ASSNAME_H2如果使用命名空间的时候,要把命名空间加到文件名前面:#ifndefSORUTION_PROJECT_NAMESPACE_C1ASSNAME_H#defineSORUTION_PROJECT_NAMESPACE_C1ASSNAME_H#endif2.1.4o方法和函数的布局(适用于C/C+)2对于有较多参数的函数的写法如果参数较多,一行写不下,我们应该分成几行来写,并且每个参数都另起一行对齐:intAnyMethod(arg1,arg2,arg3,arg4);或intAnyMethod(intarg1intarg2intintarg3arg4);2.2.缩进、制表符以及空格(适用于C/C+)2缩进的时候,每一层缩进3,4,或8个空格。(推荐使用4个空格)2不要使用TAB,用空格,大多数编辑器可以用空格代替TAB。TAB应固定4个空格,因为大多数编辑器都是这么设置的。2