收藏 分销(赏)

C++编码标准规范.doc

上传人:精**** 文档编号:2782899 上传时间:2024-06-05 格式:DOC 页数:32 大小:94.54KB
下载 相关 举报
C++编码标准规范.doc_第1页
第1页 / 共32页
C++编码标准规范.doc_第2页
第2页 / 共32页
C++编码标准规范.doc_第3页
第3页 / 共32页
C++编码标准规范.doc_第4页
第4页 / 共32页
C++编码标准规范.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、1. 命名规则1.1. 起个适当名字1.1.1. 类名称(合用于C+) 类名称要能告诉咱们,这个类是什么。因而,类名称普通是名词。 类名字不需要告诉咱们,它从哪个类继承而来。 有时候加个后缀是很有用。例如类是一种代理(Agents)时,起名叫DownloadAgent更能表达真实意图。1.1.2. 办法和函数名称(合用于C/C+) 办法和函数普通都要执行某种行为,因而,名称要能清晰阐明它做什么:CheckForErrors() 而不是ErrorCheck(),DumpDataToFile() 而不是 DataFile()。 这样也可以很容易区别函数和数据。 函数名总以动词开头,背面跟随其他名称

2、。这样看起来更自然些。 可以加某些必要后缀:Max 表达取最大值Cnt 表达当前计数值Key 表达键值例如:RetryMax 表达可接受最大数,RetryCnt表达当前接受数量。 前缀也同样有用:Is 用于询问某些问题。只要看到Is开头,就懂得这是一种查询。Get 用于获取一种值。Set 用于设立一种值。例如:IsHitRetryLimit.1.1.3.具有度量单位名称(合用于C/C+) 如果一种变量用于表达时间,重量或其他度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。例如:uint32 mTimeoutMsecs;uint32 mMyWeightLbs;1.1.4. 缩写

3、名称不要所有大写(合用于C/C+) 无论是什么缩写名称,咱们总以一种大写字母开头,背面跟随字母所有用小写。例如:class FluidOz;/ 而不是 FluidOZclass NetworkAbcKey;/ 而不是 NetworkABCKey1.2.类命名(合用于C+) 用大写字母作为单词分隔,每个单词首字母大写,其他字母均小写。 名字第一种字母应大写 不具有下划线 (_)例如: class NameOneTwo; class Name;1.3.类库(或程序库)命名 (合用于C/C+) 使用命名空间防止名字冲突。 如果编译器没有实现命名空间,需要用前缀来避名名字冲突,但是前缀不要过长(2个字

4、母比较好)。例如:John Johnson 完毕了一种数据构造库,它可以使用JJ作为库前缀,因此类名就象下面这样: class JjLinkList 1.4.办法和函数命名(合用于C+) 使用与类名相似规则例如: class NameOneTwo public: int DoIt(); void HandleError(); 1.5.类属性命名(合用于C+) 属性(普通是非公有数据成员)名字以字母m开头。 在 m(m_) 背面,使用与类名相似规则。 m(m_) 总是位于其他修饰符(如表达指针 p)前面。例如: class NameOneTwo public: int VarAbc(); int

5、 ErrorNumber(); private: int mVarAbc; int mErrorNumber; String* mpName; 1.6.办法和函数参数命名(合用于C+) 第一种字母必要小写。 第一种字母背面单词使用与类名相似规则。例如: class NameOneTwo public: int StartYourEngines( Engine&rSomeEngine,Engine&rAnotherEngine); 1.7.局部变量命名(合用于C/C+) 所有字母都用小写 使用下划线 _ 作为单词分隔。例如: intNameOneTwo:HandleError(int error

6、Number) int error= OsErr(); Time time_of_error;ErrorProcessor error_processor; 1.8.指针变量命名前缀(合用于C/C+) 指针变量多数状况应在前面加 p。 星号 * 应接近类型,而不是变量名。例如: String* pName=new String; 特别:String* pName,name;应提成两行来写: String* pName; String name;1.9.引用变量和返回引用函数命名前缀(合用于C+) 引用必要用 r作前缀修饰。例如: class Test public: void DoSometh

7、ing(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+) 全局常量所有大写,并如下划线 _ 分隔单词。例如: const intA_GLOBAL_CONSTANT = 5;1.12.静态变量命名前缀(合用于C

8、+) 静态变量以 s 作为前缀。例如: class Test public: private: staticStatusInfo m_sStatus; 1.13.自定义类型(typedef)命名(合用于C/C+) 类型定义名称指是用typedef定义名称。 类型定义名称使用与类名相似规则,并使用Type作为后缀。例如: typedefuint16 ModuleType; typedefuint32 SystemType;1.14.宏定义命名(合用于C/C+) 所有单词字母都用大写,并使用下划线 _ 分隔.例如:#define MAX(a,b) blah#define IS_ERR(err) b

9、lah1.15.C 函数命名(合用于C/C+) C+项目中,应尽量少用C函数。 C函数使用GNU规范,所有字母都使用小写,并用下划线 _ 作为单词分隔。例如: intsome_bloody_function() 特别,为了赚容C/C+,在必要时候,在C+中应如下面格式定义C函数: extern “C” int some_bloody_function(); 或在C/C+中推荐使用下面格式: #ifdef_cplusplus_ extern “C” #endif intsome_bloody_function() #ifdef_cplusplus_ #endif1.16.枚举命名(合用于C/C+

10、) 所有字母都大写,并用下划线 _ 作为单词分隔。例如: enumPinStateType PIN_OFF, PIN_ON ;enum STATE_ERR,STATE_OPEN,STATE_RUNNING,STATE_DYING;2. 排版规则2.1. 布局和模板2.1.1. 类布局模板 (合用于C+) 请使用下面模板来创立一种新类:/*用一行来描述类*#include XX.h *-llib*类详细阐明* seesomething*/#ifndefSORUTION_PROJECT_CLASSNAME_H#defineSORUTION_PROJECT_CLASSNAME_H/在这里包括系统头文

11、献/在这里包括项目头文献/在这里包括局部头文献/在这里放置前置引用/classXXpublic:/类生命周期控制函数,如构造和析构,以及状态机/* *Default constructor. */ XX(void);/* *Copy constructor. * *param from The value to copy to this object. */ XX(constXX& from);/* *Destructor. */ virtual XX(void);/在这里放置类运算操作符/* *Assignment operator. * *param from THe value to a

12、ssign to this object. * *return A reference to this object. */ XX& operator=(XX&from);/在这里放置类操作/在这里放置属性存取/在这里放置类状态查询protected:private:;/内联办法定义/外部引用/#endif/SORUTION_PROJECT_CLASSNAME_H 定义顺序是:public,protected,private 要清晰public/protected/private都应当放置哪些东西2.1.2.源文献格式(合用于C+)#includeXX.h/ class implemented

13、/ 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 如

14、果使用命名空间时候,要把命名空间加到文献名前面:#ifndefSORUTION_PROJECT_NAMESPACE_CLASSNAME_H#defineSORUTION_PROJECT_NAMESPACE_CLASSNAME_H#endif2.1.4. 办法和函数布局 (合用于C/C+) 对于有较多参数函数写法如果参数较多,一行写不下,咱们应当提成几行来写,并且每个参数都另起一行对齐:intAnyMethod(intarg1,int arg2,int arg3,int arg4);或intAnyMethod(int arg1 ,int arg2 ,int arg3 ,int arg4);2.2

15、. 缩进、制表符以及空格 (合用于C/C+) 缩进时候,每一层缩进3,4,或8个空格。(推荐使用4个空格) 不要使用TAB,用空格,大多数编辑器可以用空格代替TAB。TAB应固定4个空格,由于大多数编辑器都是这样设立。 虽然没有规定缩进层次,但是4至5层是适当。如果缩进层次太多,你也许需要考虑与否进行代码重构了。例如:void func() if(something bad) if(another thing bad) while(more input) 2.3. 尽量使一行不要超过78个字母 (合用于C/C+) 有许多编辑器屏幕只有78个字母宽2.4. 保证一行只写一条语句 (合用于C/C+

16、) 一行最多只写一条语句 一行只定义一种变量例如:不要象下面这样:char* a,*x;int width,height;/widthand height of image要象这样: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)

17、 somevalue = 2; 单行格式:if (1 = somevalue) somevalue = 2;或下面这样(对于这种写法,建议使用花括号):if (1 = somevalue)somevalue = 2;2.5.3. 在花括号结束位置加上注释 在花括号结束位置加上注释是一种好习惯。如果先后花括号距离很远,注释就能帮你理解它是如何相应。如:while(1)if(valid) / if validelse / not valid/ end forever2.5.4. 注意屏幕大小 一种语句块尽量不超过一种屏幕大小,这样,不要卷动屏幕就可以阅读代码。2.6.圆括号 () 规则 (合用于C

18、/C+) 圆括号与核心字之间应放一种空格。 圆括号与函数名之间不要有空格。 Return 语句不要使用圆括号。例如: if (condition) while(condition) strcpy(s,s1); return 1;2.7.if else 语句格式 (合用于C/C+) 布局 if (条件) / 注释 else if (条件) / 注释 else / 注释 条件格式总是把常量放在等号或不等于号左边:if ( 6 = errorNum ) .一种很重要理由是,如果漏写一种等号,这种写法会产生一种编译错误,有助于立即发现问题。例如:if ( errorNum = 6) .错写成:if (

19、 errorNum = 6) . / 这是一种不容易发现劫难2.8.switch 格式 (合用于C/C+) 直通case语句,应当放置一条注释阐明这个case语句是直通到下一种case语句。 总是要写default语句,不论与否是需要。 在case中需要定义变量时候,应把所有代码放在语句块中。例如:switch(.)case1: ./继续执行case2case2: intv; . break;default:2.9. 使用goto,continue,break 和 ?:(合用于C/C+)2.9.1. Goto 尽量避免使用Goto 语句。一种合理使用goto语句场合是,当你需要从多层循环中跳出

20、。例如:for(.)while(.) .if(disaster)gotoerror;/跳出循环 .error:clean up the mess 跳转标号必要单独在一行最左边。Goto语句需要有相应注释,阐明它用途。2.9.2. Continue and Break Continue 和break 事实上起到与goto同样作用,因而,尽量少用为上。并且,Continue与break最佳不要连用。2.9.3. ?: 用括号把条件表达式括起来。 不要在 ?:中写上过多代码,操作表达式应尽量简洁。 操作语句应分行写,除非它们可以简洁放在一行当中。例如: (condition) ?funct1() :

21、func2(); 或 (condition) ?longstatement :anotherlong statement;2.10.运算符号规则 (合用于C/C+) 一元操作符如(!、 等等)应贴近操作对象。如:if (!IsOk)return +v; 二元操作符如(+、*、%、= 等等)应在先后留空格。如:if ( v1 = v2) return v1 * 3; + 和 - 尽量使用前置运算。在C+中,不论 +i 还是 i+,总是+i更容易生成优化代码。如:for(int i = 0;i 10;+i)2.11. 变量声明语句块 (合用于C/C+) 变量应当是随用随声明,不要集中在函数前(有些

22、C语言不支持,则不在此规定之列)。特别是在for语句循环变量,应只在for语句中定义。如:for(int i = 0;i (y) ?(x) :(y) / 取最大数#endif使用内联函数可以达到相似效果,并且更安全: inline int max(int x,inty) return (x y ?x :y); 要注意副作用必要小心副作用,由于在调用表达式时,会发生潜在错误。例如: MAX(f(x),z+); 表达式总是用括号括起来在宏展开时,使用括号可以避免宏展开后产生二义性。例如:#define ADD(x,y) x + y必要写成:#define ADD(x,y) (x) + (y) 保证宏名称唯一性和全局变量同样,宏也会与其他名称产生冲突。下面两条规则有助于解决这个问题:n 在宏名称前加上库名字避免使用简朴而惯用名字,如:MAX 和MIN

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服