C/C++语言编码规范实达和创电脑系统有限公司1/25C/C++语言编码规范C/C++语言编码规范实达和创电脑系统有限公司2/25目录C/C++语言编码规范1目录21.命名规则41.1.起个合适的名字41.1.1.类的名称(适用于C++)41.1.2.方法和函数的名称(适用于C/C++)41.1.3.含有度量单位的名称(适用于C/C++)41.1.4.缩写名称不要全部大写(适用于C/C++)41.2.类的命名(适用于C++)51.3.类库(或程序库)命名(适用于C/C++)51.4.方法和函数的命名(适用于C++)51.5.类属性的命名(适用于C++)51.6.方法和函数参数的命名(适用于C++)61.7.局部变量的命名(适用于C/C++)61.8.指针变量的命名前缀(适用于C/C++)61.9.引用变量和返回引用函数的命名前缀(适用于C++)71.10.全局变量的命名前缀(适用于C/C++)71.11.全局常量的命名(适用于C/C++)71.12.静态变量的命名前缀(适用于C++)71.13.自定义类型(typedef)的命名(适用于C/C++)71.14.宏定义的命名(适用于C/C++)81.15.C函数的命名(适用于C/C++)81.16.枚举的命名(适用于C/C++)82.排版规则102.1.布局和模板102.1.1.类的布局模板(适用于C++)102.1.2.源文件格式(适用于C++)112.1.3.保护头文件不被重复包含(适用于C/C++)122.1.4.方法和函数的布局(适用于C/C++)132.2.缩进、制表符以及空格(适用于C/C++)132.3.尽量使一行不要超过78个字母(适用于C/C++)132.4.保证一行只写一条语句(适用于C/C++)132.5.花括号{}规则(适用于C/C++)142.5.1.花括号的位置142.5.2.什么时候应使用花括号142.5.3.在花括号结束的位置加上注释142.5.4.注意屏幕大小152.6.圆括号()规则(适用于C/C++)152.7.ifelse语句的格式(适用于C/C++)152.8.switch格式(适用于C/C++)162.9.使用goto,continue,break和?:(适用于C/C++)162.9.1.Goto16C/C++语言编码规范实达和创电脑系统有限公司3/252.9.2.ContinueandBreak172.9.3.?:172.10.运算符号的规则(适用于C/C++)172.11.变量声明语句块(适用于C/C++)173.文档及注释193.1.文件或程序库的文档注释(适用于C/C++)193.2.类文档注释(适用于C/C++)193.3.函数文档注释(适用于C/C++)193.4.Include语句注释(适用于C/C++)203.5.语句块注释(适用于C/C++)204.编码要求224.1.不要忽略编译器的警告(适用于C/C++)224.2.应使用源代码管理器(适用于C/C++)224.3.固有的类方法成员(适用于C++)224.4.使用命名空间(适用于C++)224.5.初始化所有的变量(适用于C/C++)224.6.保持函数短小精悍(适用于C/C++)224.7.对空语句进行注释(适用于C/C++)234.8.不要用if语句的默认方法测试非零值(适用于C/C++)234.9.布尔类型(适用于C/C++)234.10.避免在语句中内含赋值(适用于C/C++)244.11.正确的使用Const(适用于C/C++)244.12.不要在头文件定义数据(适用于C/C++)244.13.不要直接使用数字(适用于C/C++)244.14.宏(适用于C/C++)25C/C++语言编码规范实达和创电脑系统有限公司4/251.命名规则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;//而不是NetworkABCKeyC/C++语言编码规范实达和创电脑系统有限公司5/251.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'总是位于其它修饰符(如表示指针的'p')的前面。例如:classNameOneTwo{public:intVarAbc();intErrorNumber();C/C++语言编码规范实达和创电脑系统有限公司6/25private: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;C/C++语言编码规范实达和创电脑系统有限公司7/251.9.引用变量和返回引用函数的命名前缀(适用于C++)引用必须用'r'作前缀修饰。例如:classTest{public:voidDoSomething(StatusInfo&rStatus);StatusInfo&rStatus();constStatusInfo&Status()const;//这里返回的是常量引用,所以不符合本规则private:StatusInfo&mrStatus;}1.10.全局变量的命名前缀(适用于C/C++)全局变量总是以'g'作为前缀。例如:LoggergLog;Logger*gpLog;1.11.全局常量的命名(适用于C/C++)全局常量全部大写,并以下划线'_'分隔单词。例如:constintA_GLOBAL_CONSTANT=5;1.12.静态变量的命名前缀(适用于C++)静态变量以's'作为前缀。例如:classTest{public:private:staticStatusInfomsStatus;}1.13.自定义类型(typedef)的命名(适用于C/C++)C/C++语言编码规范实达和创电脑系统有限公司8/25类型定义名称指的是用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++中推荐使用下面的格式:#ifdef__cplusplus__extern“C”{#endifintsome_bloody_function(){}#ifdef__cplusplus__}#endif1.16.枚举的命名(适用于C/C++)所有字母都大写,并用下划线'_'作为单词分隔。例如:enumPinStateType{PIN_OFF,PIN_ONC/C++语言编码规范实达和创电脑系统有限公司9/25};enum{STATE_ERR,STATE_OPEN,STATE_RUNNING,STATE_DYING};C/C++语言编码规范实达和创电脑系统有限公司10/252.排版规则2.1.布局和模板2.1.1.类的布局模板(适用于C++)请使用下面的模板来创建一个新的类:/***用一行来描述类**#includeXX.hBR*-llib**类的详细说明**@seesomething*/#ifndefXX_h#defineXX_h//在这里包含系统头文件////在这里包含项目头文件////在这里包含局部头文件////在这里放置前置引用//classXX{public://类的生命周期控制函数,如构造和析构,以及状态机/***Defaultconstructor.*/XX(void);C/C++语言编码规范实达和创电脑系统有限公司11/25/***Copyconstructor.**@paramfromThevaluetocopytothisobject.*/XX(constXX&from);/***Destructor.*/~XX(void);//在这里放置类的运算操作符/***Assignmentoperator.**@paramfromTHevaluetoassigntothisobject.