Google C++编码规范总结

-----摘自google c++编码规范(edionpeng翻译中文版)

        本文只列出总结,具体细节请点击原文链接或者附件中的中文版。


头文件:

1.避免多重包含是学编程时最基本的要求;

2.前置声明是为了降低编译依赖,防止修改一个头文件引发多米诺效应;

3.内联函数的合理使用可提高代码执行效率

4.-inl.h可提高代码可读性;

5.标准化函数参数顺序可以提高可读性和易维护性

6.包含文件的名称使用.和..虽然方便却易混乱,使用比较完整的项目路径看上去很兴趣、很条理,包含文件的次序除了美观之外,最重要的是可以减少隐藏依赖,使每个头文件在“最需要编译”的地方编译,有人提出库文件放在最后,这样出错先是项目内的文件,头文件都放在对应源文件的最前面,这一点足以保证内部错误的及时发现。


命名空间:

1..cc中的不具名命名空间可避免命名冲突、限定作用域,避免直接使用Using提示符污染命名空间;

2.嵌套类符合局部使用原则,只是不能再其他头文件中前置声明,尽量不要public;

3.尽量不用全局函数和全局变量,考虑作用域和命名空间限制,尽量单独形成编译单元;

4.多线程中的全局变量(含静态成员变量)不要使用class类型(含StL),避免不明确行为导致的bugs.

5.作用域的使用,除了考虑名称污染、可读性之外,主要是为降低耦合度,提高编译、执行效率。


c++类:

1.不在构造函数中做太多逻辑相关的初始化;

2.编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数;

3.为避免隐式转换,需将单参数构造函数声明为explicit;

4.为避免拷贝构造函数、赋值操作的滥用和编译器自动生成,可目前声明其为private且无需实现;

5.仅在作为数据集合时使用struct;

6.组合>实现继承>接口继承>私有继承,自雷重载的虚函数也要声明为virtual关键字,虽然编译器允许不这样做;

7.避免使用多重继承,使用时,除一个基类含有实现外,其他基类均为纯接口;

8.接口类类名以Interface为后缀,除提供带实现的虚析构函数、静态成员函数外,其他均为纯虚函数,

不定义非静态数据成员,不提供构造函数,提供的话,声明为protected;

9.为降低复杂性,尽量不重载操作符,模板、标准类中使用时提供文档说明;

10.存取函数一般内联在文件头中;

11.类声明次数:public->protected->private;

12.函数体尽量短小、紧凑,功能单一


其他:

1.对于智能指针,安全第一、方便第二,尽可能局部化(scoped_ptr);

2.引用形参加上const,否则使用指针形参;

3.函数重载的使用要清晰、易懂

4.鉴于容易误用,禁止使用缺省函数参数;

5.禁止使用边长数组;

6.合理使用友元;

7.为了方便代码管理,禁止使用异常

8.禁止使用RTTI,否则重新设计代码吧;

9.使用c++风格的类型转换,除单元测试外不要使用dynamic_cast;

10.使用流换printf+read/write,it is a problem;

11.能用前置自增/减不用后置自增/减;

12.const能用则用,提倡const在前;

13.使用确定大小的整形,除位组外不要使用无符号型;

14.格式化输出及结构对齐时,注意32位和64位的系统差异;

15.除字符串化、连接外尽量避免使用宏;

16.整数用0,实数用0.0,指针用NULL,字符串(串)用'\0';

17.用sizeof(varname)代替sizeof(type);

18.只是用Boost中被认可的库。


命令约定:

1.总体规则:不要随意缩写,如果说ChangeLocalValue写作ChglocVal还情有可原的话,把ModifyPlayerName写作

MdfPlyNm就太过分,除函数名可适当为动词外,其他命名尽量使用清晰易懂的名词;

2.宏、枚举等使用全部大写+下划线;

3.变量(含类、结构体成员变量)文件、命名空间、存取函数等使用全部小写+下划线,类成员变量以下划线结尾,全局变量以g_开头;

4.普通函数、类型(含类和结构体,枚举类型)、常量等使用大小写混合,不含下划线;

5.参考现有或相近命名约定。


代码注释:

1.关于注释风格,很多C++的coders更喜欢行注释,C coders或许对块注释依然情有独钟,或者在文件头大段大段的注释中使用注释;

2.文件注释可以炫耀你的成就,也是为了捅了娄子别人可以找你;

3.注释要言简意赅,不要拖沓冗余,复杂的东西简单化和东西复杂化都要被鄙视;

4.对于Chinese Coders来说,用英文注释还是用中文注释,it is a problem,但不管怎么样,注释是为了让别人看懂,

难道是为了炫耀编程语言之外的你的母语或外语水平吗?

5.注释不要太乱,适当的缩进才会让人乐意看,但也没有必要规定注释要从第几列开始,

Unix/Linux下海可以约定是tab还是space,个人倾向于space;

6.Todo很不错,有时候,注释确实是为了标记一些还没完成或完成得不尽如人意的地方,这样一搜索,就知道还有哪些活要干,日志都省了。


格式:

1.行宽原则上不超过80列,把22寸的显示屏都占完,怎么也说不过去;

2.尽量不使用非ASCII字符,如果使用的话,参考UTF-8格式(尤其是Unix/Linux下,Windows下可以考虑考虑宽字符),尽量不将字符串常量耦合到代码中,比如独立出资源文件,这不仅仅是风格问题了;

3.Unix/Linux下无条件使用空格,MSVC的话使用Tab也无可厚非;

4.函数参数、逻辑条件、初始化列表:要么所有参数和函数名放在同一行,要么所有参数并列分行;

5.除函数定义的左大括号可以置于行首外,包括函数/类/结构体/枚举声明、各种语句的左大括号置于行尾,所有左大括号独立成行;

6.-〉操作符前后不留空格,*/&不要前后都留,一个就可,靠左靠右依个人喜好;

7.预处理指令/命名空间不使用额外缩进,类/结构体/枚举/函数/语句使用所用缩进;

8.初始化用=还是()依个人喜好,统一就好;

9.return不要();

10.水平/垂直留白不要滥用,怎么易懂怎么来


英文版链接如下:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

中文版链接:http://download.csdn.net/detail/luoti784600/5716977


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值