GooGle c++编码风格--头文件


本文所学习的GooGle规范下载于:

     博客作者:skyseraph  出处:http://www.cnblogs.com/skyseraph/ 

     连接:https://www.cnblogs.com/skyseraph/archive/2011/03/09/1978677.html

    若有侵权,请立即连接,以便删除。

前言:虽然Google的风格很规范,可是一万个人有一万个哈姆雷特,所以结合规范风格,引申出适合自己的风格才是最好的。

1.头文件

1.1#define保护

 用于防止某个.h文件被多重包含,命名格式<PROJECT>_<PATH>_<FILE>_H_

Ex:为保证唯一性, 头文件的命名应该依据所在项目源代码树的全路径. 例如, 项目 foo 中的头文件 foo/src/bar/baz.h 可按如下方式保护:

#ifndef FOO_BAR_BAZ_H_

#define FOO_BAR_BAZ_H_

#endif // FOO_BAR_BAZ_H_

如果项目不是太大,许多.h文件实唯一的,可简单的使用<FILE>_H_即可,上面写成

#ifndef BAZ_H_

#define BAZ_H_

#endif // BAZ_H_

 

1.2头文件依赖

       当某个文件被包含的同时,这个文件又包含了其他的头文件,那么当这个文件修改时,代码会重新编译,而这个头文件所包含的文件也会被重新编译、、,这样依次会导致许多文件被过多编译。

所以使用前置声明来减少需要包含的头文件数量。

Ex:

如果头文件中用到类File,可是不需要访问File的声明(即不用函数等等),那么头文件只需前置声明class File;而 不用#include “file.h

而此时你能用分类操作为:

  • 我们可以将数据成员类型声明为 Foo * 或 Foo &.
  • 我们可以将函数参数 / 返回值的类型声明为 Foo (但不能定义实现).
  • 我们可以将静态数据成员的类型声明为 Foo, 因为静态数据成员的定义在类定义之外.

可是记住:不要为了减少头文件的包含,而过多的使用指针来代替对象成员。

 

1.3内联函数

只有当函数只有 10 行甚至更少时才将其定义为内联函数.

这里不做讨论,因为一般情况下,用的很少。

只写一些经验:

一个较为合理的经验准则是, 不要内联超过 10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用!

内联那些包含循环或 switch 语句的函数常常是得不偿失 (除非在大多数情况下, 这些循环或 switch 语句从不被执行).

有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要; 比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.(

 

 

1.4 -inl.h

这是用来存储内联函数的实现的,一般内联函数的实现放在对应的.h文件里面,可是当内联函数过大时,会造成.h文件的笨重,所以可以将内联函数写到-inl.h文件进行实现。

 

1.5 函数参数的顺序

定义函数时, 参数顺序依次为: 输入参数, 然后是输出参数.

       C/C++ 函数参数分为输入参数, 输出参数, 和输入/输出参数三种. 输入参数一般传值或传 const 引用, 输出参数或输入/输出参数则是非-const 指针. 对参数排序时, 将只输入的参数放在所有输出参数之前. 尤其是不要仅仅因为是新加的参数, 就把它放在最后; 即使是新加的只输入参数也要放在输出参数.

       这条规则并不需要严格遵守. 输入/输出两用参数 (通常是类/结构体变量) 把事情变得复杂, 为保持和相关函数的一致性, 你有时不得不有所变通.

 

1.6 #include的路径即顺序

使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖: C 库, C++ 库, 其他库的 .h, 本项目内的 .h.

我们希望每一个头文件都是可被独立编译的 (yospaly 译注: 即该头文件本身已包含所有必要的显式依赖), 最简单的方法是将其作为第一个 .h 文件 #included 进对应的 .cc.

  1. dir2/foo2.h (优先位置, 详情如下)
  2. C 系统文件
  3. C++ 系统文件
  4. 其他库的 .h 文件 //该处在小项目之中往往只有一个项目,所以此处这时可省略
  5. 本项目内 .h 文件

Ex:google-awesome-project/src/foo/internal/fooserver.cc 的包含次序如下:

#include "foo/public/fooserver.h" //

#include <sys/types.h>

#include <unistd.h>

#include <hash_map>

#include <vector>

#include "base/basictypes.h"

#include "base/commandlineflags.h"

#include "foo/public/bar.h"

 

 

总结:

1.避免多重包含

2.合理使用前置声明,减少可能存在的额外编译

3.合理使用内联函数,提高代码效率

4.根据自己的想法进行函数位置排序

5.合理编排文件的头文件排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值