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源文件符合此文档中的规则, 我们才 ...
随机推荐
-
js中的 &;&; 和 ||
js里面&&和||用法容易绕进去. 总结一下,遵循短路原则. &&就是去找false的选项,||就是去找true的选项. 比如 a&&b 如果 a为fa ...
-
HTML5 十大新特性(四)——Canvas绘图
H5引入了canvas标签,默认是一个300*150的inline-block.canvas的宽高只能用它自身的width和height属性来指定,而不能使用css样式中的width.height. ...
-
Collection中的排序
我们来了解一下Collection的框架与接口: Set接口下面已经有SortedSet接口,其中提供了很多自带排序的实现类,例如ThreeSet,用户还能够自定义比较器来规定自己的排序规则. 本篇着 ...
-
Spring事务-三种实现方式
一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
-
win2008 64位下.net 无法访问oracle
这两天换了台新机子,就想弄个新系统win2008 64bit来测试下,也尝尝新鲜,结果是碰的头破血流啊,哈哈就像挖宝似的 环境:win2008 64bit + IIS7+.net2.0 +ORACLE ...
-
WOJ 1020
#include<stdio.h> #include<stdlib.h> int main() { int n,m; int *num,*link; int i,j,t,k=0 ...
-
Lvs+keepalived+mysql主从热备
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
-
Docker Compose 常用命令
Compose常用选项 # docker-compose主命令后面跟其他命令 docker-compose Usage: docker-compose [-f <arg>...] [opt ...
-
单页应用 WebApp SPA 骨架 框架 路由 页面切换 转场
这里收录三个同类产品,找到他们花了我不少时间呢. 张鑫旭写的mobilebone自述:mobile移动端,PC桌面端页面无刷新过场JS骨架,简单.专注!http://www.zhangxinxu.co ...
-
【转】jsp+servlet和SSM分别是如何实现文件上传(示例)
原文地址:https://blog.csdn.net/niceliusir/article/details/78453560 以下是jsp+servlet和SSM分别是如何实现文件上传的方法示例 两种 ...