您的位置:首页 > 编程语言 > C语言/C++

Google C++编程规范学习--头文件

2016-12-11 23:41 260 查看
     1、使用#define防止多次包含(multiple inclusion),宏命令规则:project_path_file_H_,如项目test中include目录下一个文件foo.h,宏定义为:#define TEST_INCLUDE_FOO_H_;

2、尽量使用前向声明代替头文件包含。原因:

A文件包含:

B.h

C.h

B或C头文件发生变化时,编译时A文件及依赖A.h的所有文件都要重新编译。

头文件中可以使用前向声明代替头文件包含情况有:

1)、指针或引用变量;

2)、参数、返回值类型的函数(只能是声明,不能包含实现,实现放到cpp文件中情况);

3)、静态数据成员的声明。

如:

#ifndef GOOGLEFORMATCODE_FORWARDDECLARATION_H_
#define GOOGLEFORMATCODE_FORWARDDECLARATION_H_

class CTestA;

class CForwardDeclaration
{
public:
CForwardDeclaration();
~CForwardDeclaration() {}

public:
void SetTestA(const CTestA& testA);
CTestA GetTestA();
void SetTestATwo(CTestA testA);

private:
CTestA* m_pTestA;
CTestA& m_TestA;
static CTestA s_TestA;
};

#endif



3、内联函数的使用,一般有以下规则:

1)、代码行数小于10行的;

2)、不能包含有循环、条件语句;

3)、virtual、递归函数不能是内联函数;

4)、内联函数比较复杂时,实现可以放到以-inl.h结尾的文件中(注意,这个文件也需要#define保护,防止多次包含)。

内联函数和普通函数一个比较大区别:代码调用内联函数会类似调用宏定义,会把代码在调用的地方展开;而普通函数会做一些记录,然后跑到函数中执行,执行结束后再返回,继续执行剩下的语句。

4、函数参数,一般输入参数在前,输出参数在后(有些参数可能再者皆有,所以,这个参数顺序规则不强制要求)。

5、包含文件的名称和次序:将包含次序标准化可增强可读性、避免隐藏依赖。

包含的名称避免使用.(当前目录)和..(父目录)这种UNIX文件路径。

包含次序:C库、C++库、其他库的.h、项目内的.h。

例如:
A.h

struct BS bs;
...

B.h

struct BS{
....
};

在A.c中

//这样会报错
#include A.h  
#include B.h

//先包含B.h就可以
#include B.h
#include A.h

一般解决要么在.h文件中包含B.h文件或是在.h中使用前向声明(如果可以,更推荐使用前向声明)。

这样就叫"隐藏依赖"
参考:http://www.cnblogs.com/HappyYouxi/archive/2014/04/15/3666476.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息