google C++编程风格指南之头文件的包括顺序
google C++编程风格对头文件的包括顺序作出例如以下指示:
(1)为了加强可读性和避免隐含依赖,应使用以下的顺序:C标准库、C++标准库、其他库的头文件、你自己project的头文件。只是这里最先包括的是首选的头文件,即比如a.cpp文件里应该优先包括a.h。
首选的头文件是为了降低隐藏依赖,同一时候确保头文件和实现文件是匹配的。详细的样例是:假如你有一个cc文件(linux平台的cpp文件后缀为cc)是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"
隐含依赖又叫作隐藏依赖,即一个头文件依赖其他头文件。
比如:
//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
这样就叫”隐藏依赖”。假设先包括A.h就能够发现隐藏依赖。所以各种规范都要求自身的头文件放在第一个。就能发现隐藏依赖。解决的方法就是在A.h中包括B.h。而不是在A.c中再包括。
(2)在包括头文件时应该加上头文件所在project的文件夹名,即假如你有这样一个projectbase。里面有一个logging.h,那么外部包括这个头文件应该这样写:#include "base/logging.h",而不是#include "logging.h"。
我们看到《Google C++ 编程风格指南》倡导原则背后隐藏的目的是:
(1) 为了降低隐藏依赖,源文件应该先包括其相应的头文件(本文称之为首选项)。
(2)除了首选项外。遵循从一般到特殊的原则。
只是我认为《Google C++ 编程风格指南》的顺序:C标准库、C++标准库、其他库的头文件、自己project的头文件。在最前面漏了一项:操作系统级别的头文件。比方上面样例sys/types.h不能归入C标准库。而是Linux操作系统提供的SDK。
因此我认为更准确的说法应该是:OS SDK .h , C标准库、C++标准库、其他库的头文件、你自己project的头文件。
(3)之所以要将头文件所在project文件夹列出,作用同命名空间一样。为了解决头文件重名问题。
參考文献
[1]http://www.cnblogs.com/clever101/archive/2011/08/21/2147892.html
[2]http://www.cnblogs.com/frydsh/p/3466660.html
google C++编程风格指南之头文件的包括顺序的更多相关文章
- 读书笔记 |Google C++编程风格指南
Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...
- Google C++编程风格指南 - 中文版
Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...
- Java学习笔记(四)——google java编程风格指南(上)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- Java学习笔记(五)——google java编程风格指南(中)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- Java学习笔记(六)——google java编程风格指南(下)
[前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...
- Google C++编程风格指南
作者:Hawstein 出处:http://hawstein.com/posts/google-cpp-style-guide.html 前言 越来越发现一致的编程风格的重要性,于是把Google的C ...
- Google Java编程风格指南
出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...
- Google Java编程风格指南中文版
作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...
- Google Java 编程风格指南 —— 见微知著
目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才 ...
随机推荐
- 利用HTML5新特性改变浏览器地址后不刷新页面
原文:http://www.cnblogs.com/xuchengzone/archive/2013/04/18/html5-history-pushstate.html 作为一个程序员,上Git ...
- 密码学那些事———SHA-512及其C++实现
SHA-512及其C++实现 转载请注明出处 一.引言 相信大家对于哈希压缩加密算法应该不陌生,在我们用微信或者支付宝接口的时候经常会遇到用这类算法加密,以验证数据的完整性.可以说这类算法无处不在,那 ...
- 如何部署Java_web项目到云服务器上
步骤 1:购买 Linux 实例(略) 步骤2:安装JDK 本节介绍如何安装java jdk. 软件包中包含的软件及版本如下: Tomcat:1.8.0_121 说明:这是写文档时参考的软件版本.您下 ...
- 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)
实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ...
- C# 插入排序(数据结构与算法)
1 }
- Robotium 框架学习之概述
框架目的: Robotium is an Android test automation framework that has full support for native and hybrid a ...
- 使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端
预备知识: http://www.cnblogs.com/cgzl/p/7746496.html 第一部分: http://www.cnblogs.com/cgzl/p/7780559.html 第二 ...
- Qt颜色下拉框
上周为了用Qt写一个类似颜色下拉框的东西,查阅了网上的多数相关资料,依然没有我想要的.终于在周四的时候下定决心重写QCombobox类来实现功能,现在把它贴出来,望看到的人,批评指正.废话不多说,先上 ...
- java自动生成entity文件
网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...
- Mac中配置nvm
1.安装 nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 安装成功默认将 ...