C++编码规范(2)_第1页
C++编码规范(2)_第2页
C++编码规范(2)_第3页
C++编码规范(2)_第4页
C++编码规范(2)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1. 命名规则1.1. 起个合适的名字1.1.1.类的名称(适用于c+ )2 类的名称要能告诉我们,这个类是什么。因此,类的名称通常是名词。2 类的名字不需要告诉我们,它从哪个类继承而来的。2 有时候加个后缀是很有用的。比如类是一个代理(agents) 时,起名叫downloadagent更能表达真实的意图。1.1.2.方法和函数的名称(适用于c/c+ )2 方法和函数通常都要执行某种行为,因此,名称要能清楚的说明它做什么:checkforerrors()而不是 errorcheck(),dumpdatatofile()而不是 datafile() 。 这样也可以很容易的区别函数和数据。2

2、函数名总以动词开头,后面跟随其它名称。这样看起来更自然些。2 可以加一些必要的后缀:max 表示取最大值cnt 表示当前的计数值key 表示键值例如: retrymax表示可接收的最大数,retrycnt表示当前接收的数量。2 前缀也同样有用:is 用于询问一些问题。只要看到is 开头,就知道这是一个查询。get 用于获取一个值。set 用于设置一个值。例如: ishitretrylimit.1.1.3.含有度量单位的名称(适用于c/c+ )2 如果一个变量用于表示时间,重量或其它度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。例如:uint32 mtimeoutmsecs;

3、uint32 mmyweightlbs;1.1.4.缩写名称不要全部大写(适用于c/c+ )2 无论是什么缩写名称,我们总以一个大写字母开头,后面跟随的字母全部用小写。;.例如:class fluidoz;/而不是 fluidozclass networkabckey;/而不是 networkabckey1.2. 类的命名(适用于c+ )2 用大写字母作为单词的分隔,每个单词的首字母大写,其它字母均小写。2 名字的第一个字母应大写2 不含有下划线(_)例如:class nameonetwo;class name;1.3. 类库(或程序库)命名(适用于 c/c+ )2 使用命名空间防止名字冲突。

4、2 如果编译器没有实现命名空间,需要用前缀来避名名字冲突,不过前缀不要过长(2 个字母比较好)。例如:john johnson完成了一个数据结构的库,它可以使用jj 作为库的前缀,所以类名就象下面这样:class jjlinklist1.4. 方法和函数的命名(适用于c+ )2 使用与类名相同的规则例如:class nameonetwopublic:intdoit();voidhandleerror();1.5. 类属性的命名(适用于c+ );.2属性(通常是非公有数据成员)名字以字母m 开头。2在 m(m_) 后面,使用与类名相同的规则。2m(m_)总是位于其它修饰符(如表示指针的p )的前

5、面。例如:class nameonetwopublic:intvarabc();interrornumber();private:intmvarabc;intmerrornumber;string*mpname;1.6. 方法和函数参数的命名(适用于c+ )2 第一个字母必须小写。2 第一个字母后面的单词使用与类名相同的规则。例如:class nameonetwopublic:intstartyourengines(engine&rsomeengine,engine&ranotherengine);1.7. 局部变量的命名(适用于c/c+ )2 所有字母都用小写2 使用下划线_ 作为单词的分隔

6、。例如:intnameonetwo:handleerror(int errornumber);.interror= oserr();timetime_of_error;errorprocessor error_processor;1.8. 指针变量的命名前缀(适用于c/c+ )2 指针变量多数情况应在前面加p 。2 星号 * 应靠近类型,而不是变量名。例如:string* pname=new string;特别的: string* pname, name;应分成两行来写:string* pname;string name;1.9. 引用变量和返回引用函数的命名前缀(适用于 c+ )2 引用必须

7、用r 作前缀修饰。例如:class testpublic:voiddosomething(statusinfo&rstatus);statusinfo&rstatus();conststatusinfo& status() const; /这里返回的是常量引用,所以不符合本规则private:statusinfo&mrstatus;1.10.全局变量的命名前缀(适用于c/c+ )2 全局变量总是以g(g_) 作为前缀。;.例如:logger g_log;logger* g_plog;1.11.全局常量的命名(适用于c/c+ )2 全局常量全部大写,并以下划线_ 分隔单词。例如:const in

8、ta_global_constant = 5;1.12.静态变量的命名前缀(适用于c+ )2 静态变量以s 作为前缀。例如:class testpublic:private:staticstatusinfo m_sstatus;1.13. 自定义类型( typedef )的命名(适用于 c/c+ )2类型定义名称指的是用typedef 定义的名称。2类型定义名称使用与类名相同的规则,并使用type 作为后缀。例如:typedefuint16moduletype;typedefuint32systemtype;1.14.宏定义的命名(适用于c/c+ )2 所有单词的字母都用大写,并使用下划线_

9、分隔 .例如:#define max(a,b) blah#define is_err(err) blah1.15.c 函数的命名(适用于c/c+ );.2c+ 项目中,应尽量少用c 函数。2c 函数使用 gnu 规范,所有字母都使用小写,并用下划线_ 作为单词的分隔。例如:intsome_bloody_function()2 特别的,为了赚容c/c+ ,在必要的时候,在c+ 中应以下面的格式定义c 函数:extern“ c” int some_bloody_function();2 或在 c/c+ 中推荐使用下面的格式:#ifdef_cplusplus_extern“ c”#endifints

10、ome_bloody_function()#ifdef_cplusplus_#endif1.16.枚举的命名(适用于c/c+ )2 所有字母都大写,并用下划线_ 作为单词分隔。例如:enumpinstatetypepin_off,pin_on;enum state_err, state_open, state_running, state_dying;2. 排版规则;.2.1. 布局和模板2.1.1.类的布局模板(适用于 c+ )2 请使用下面的模板来创建一个新的类:/* 用一行来描述类*#include xx.h *-llib* 类的详细说明* seesomething*/#ifndef s

11、orution_project_classname_h#define sorution_project_classname_h/ 在这里包含系统头文件/ 在这里包含项目头文件/ 在这里包含局部头文件/ 在这里放置前置引用/class xx;.operator =(xx&from);.public :/ 类的生命周期控制函数,如构造和析构,以及状态机/*default constructor.*/xx( void );/*copy constructor.*param from the value to copy to this object.*/xx( const xx& from);/*de

12、structor.*/virtual xx(void );/ 在这里放置类的运算操作符/*assignment operator.*param from the value to assign to this object.*return a reference to this object.*/xx&/ 在这里放置类的操作/ 在这里放置属性存取;./ 在这里放置类的状态查询protected :private :;/ 内联方法定义/ 外部引用/#endif/ sorution_project_classname_h2定义的顺序是 : public, protected, private2要清

13、楚 public/protected/private都应该放置哪些东西2.1.2.源文件格式(适用于c+ )#include xx.h/ class implemented/ public/=构造函数 =xx:xx()/ xxxx:xx( const xx&)/ xxxx:xx();./ xx/=操作符 =xx&xx: operator =(xx&);return *this ;/ =/=类的操作=/=属性存取=/=状态查询=/ protected / private/2.1.3.保护头文件不被重复包含(适用于 c/c+ )2 应使用宏定义来保护头文件不被重复包含:#ifndef soruti

14、on_project_classname_h#define sorution_project_classname_h#endif / sorution_project_classname_h2 如果使用命名空间的时候,要把命名空间加到文件名前面:#ifndef sorution_project_namespace_classname_h #define sorution_project_namespace_classname_h#endif;.2.1.4.方法和函数的布局(适用于 c/c+ )2 对于有较多参数的函数的写法如果参数较多,一行写不下,我们应该分成几行来写,并且每个参数都另起一行对

15、齐:int anymethod(int arg1,intarg2,intarg3,intarg4); 或int anymethod(intarg1, int arg2, int arg3, int arg4);2.2. 缩进、制表符以及空格(适用于 c/c+ )2缩进的时候,每一层缩进3 ,4 ,或 8 个空格。(推荐使用4 个空格)2不要使用 tab ,用空格,大多数编辑器可以用空格代替tab 。 tab 应固定 4 个空格,因为大多数编辑器都是这么设置的。2虽然没有规定缩进的层次,但是4 至 5 层是合适的。如果缩进的层次太多,你可能需要考虑是否进行代码重构了。例如:voidfunc()i

16、f (something bad)if (another thing bad)while (more input);.2.3. 尽量使一行不要超过78 个字母 (适用于 c/c+ )2 有 多 器屏幕只有78 个字母 2.4. 保证一行只写一条语句(适用于 c/c+ )2 一行最多只写一条 句2 一行只定 一个 量例如:不要象下面 : char* a, *x;int width, height; /widthand height of image要象 :char* a= 0; /文档 明char* x= 0; /文档 明2.5. 花括号 规则 (适用于 c/c+ )2.5.1.花括号的位置2

17、在关 字的下一行 独放置括号,并且与关 字 ,如:if (condition).while (condition)2.5.2.什么时候应使用花括号所有的 if, while 和 do 句,要么用 行格式,要么使用花括号格式。2 使用花括号格式:if (1 = somevalue);.somevalue = 2;2 单行格式:if (1 = somevalue) somevalue = 2;或下面这样(对于这种写法,建议使用花括号):if (1 = somevalue)somevalue = 2;2.5.3.在花括号结束的位置加上注释2 在花括号结束的位置加上注释是一个好习惯。假如前后花括号距离

18、很远,注释就能帮你理解它是如何对应的。如:while (1)if (valid) / if valid else / not valid / end forever2.5.4.注意屏幕大小2 一个语句块尽量不超过一个屏幕大小,这样,不要卷动屏幕就可以阅读代码。2.6. 圆括号 () 规则 (适用于 c/c+ )2 圆括号与关键字之间应放一个空格。2 圆括号与函数名之间不要有空格。2 return 语句不要使用圆括号。例如:if (condition);.while(condition)strcpy(s, s1);return 1;2.7.if else语句的格式 (适用于 c/c+ )2 布局

19、if ( 条件 )/注释else if ( 条件 )/注释else/注释2 条件格式总是把常量放在等号或不等于号的左边:if ( 6 = errornum ) .一个很重要的理由是,假如漏写一个等号,这种写法会产生一个编译错误,有助于马上发现问题。比如:if ( errornum = 6) .错写成:if ( errornum = 6) . /这是一个不容易发现的灾难2.8.switch格式 (适用于 c/c+ )2 直通的 case 语句,应该放置一条注释说明这个case 语句是直通到下一个case 语句的。;.2 总是要写default 语句,不管是否是需要。2 在 case 中需要定义变

20、量的时候,应把所有代码放在语句块中。例如:switch (.)case 1:./ 继续执行case2case 2:int v;.break ;default :2.9. 使用 goto,continue,break 和 ?: (适用于 c/c+ )2.9.1.goto2 尽量避免使用goto 语句。一个合理使用goto 语句的场合是,当你需要从多层循环中跳出。例如:for (.)while (.).if (disaster)goto error; /跳出循环;.error:clean up the mess2 跳转的标号必须单独在一行的最左边。goto 语句需要有相应的注释,说明它的用途。2.9.2.continue and break2 continue和 break 实际上起到与goto 一样的作用,因此,尽量少用为上。并且,continue与 break 最好不要连用。2.9.3.?:2 用括号把条件表达式括起来。2 不要在 ? : 中写上过多的代码,操作表达式应尽可能简洁。2 操作语句应分行写,除非它们能够简洁的放在一行当中。例如:(condition) ?funct1() : func2();或(conditio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论