C++代码格式规范引导(二):头文件
来源:互联网 发布:ios仿淘宝首页代码 编辑:程序博客网 时间:2024/06/05 09:18
头文件引用(#include)
头文件的类别大致可以分为以下几类:标准库STL、准标准库Boost、针对C++语言的第三方库(ACE等)、基于C++语言的第三方工具库(SQLite等)、同软件下,其他solution提供的接口、同solution下,其他project提供的接口、同project下,上一级目录提供的接口、同project下,当前目录提供的接口、同project下,子目录提供的接口。对于cpp文件,尚存在一种更为特殊的头文件,与本cpp文件构成接口与实现关系。如:同名的hpp与cpp;文件名虽然不同,但为多态场景,即具有继承关系。
头文件引用顺序
基本原则:
- 由远及近
- 由通用到特殊
- 影响域逐渐缩小
- 同类头文件按字母排序。
给定顺序如下:
- (cpp)接口与实现关系的接口文件
- 标准库STL
- 准标准库Boost
- 针对C++语言的第三方库(ACE等)
- 基于C++语言的第三方工具库(SQLite等)
- 同软件下,其他solution提供的接口文件
- 同solution下,其他project提供的接口文件
- 同project下,上一级目录提供的接口文件
- 同project下,子目录提供的接口文件
- 同project下,当前目录提供的接口文件
注:头文件的隐藏依赖
每一个头文件均应该自己自足,即在任意一个cpp文件中添加该hpp时,无需添加额外的头文件来保证编译通过,即隐藏依赖。如下所示:
interface.hpp文件:#ifndef __INTERFACE_HPP__ #define __INTERFACE_HPP__ typedef std::vector<std::string> StringVector; #endif
cpp文件:
#include <vector> #include <string> #include "interface.hpp"
这样可以编译通过?确实可以编译通过。
但,若我们在另外的cpp文件中需要包含interface.hpp,那么必须在interface.hpp引用之前对vector和string进行引用,否则将会编译不通过。即头文件的隐藏依赖。
所以,为避免隐藏依赖问题,在cpp中,将存在接口与实现关系的接口文件放在第一位置。
头文件引用方式
头文件引用方式有两种:#include <file.hpp>与#include “file.hpp”
- <>
该方式检索头文件,从系统路径与工程配置的引用路径中进行检索头文件。 - “”
该方式检索头文件,采用相对路径的方式,若未能找到,则采用<>的方式进行查找。
基本原则:
- 绝对路径查找使用<>,相对路径查找使用”“
- 同project下,使用”“查找,隶属于其他库的头文件使用<>
- 头文件引用中间无需使用空行分割不同的类别
头文件引用规范示例(cpp)
#include "CurrentItf.hpp"#include <STL>#include <Boost>#include <ACE>#include <SQLite>#include <OverSolution.hpp>#include <OverProject.hpp>#include "../ParentItf.hpp"#include "SubFolder/SonItf.hpp"
头文件引用规范示例(hpp)
#include <STL>#include <Boost>#include <ACE>#include <SQLite>#include <OverSolution1.hpp>#include <OverSolution2.hpp>#include <OverSolution3.hpp>#include <OverProject.hpp>#include "../ParentItf.hpp"#include "SubFolder/SonItf.hpp"#include "SameFolderItf.hpp"
注1:单文件中头文件引用数量比较多,说明该文件承担了太多的能力,是时候拆分了。
注2:文中未对c头文件引用排序,原因是禁止c与c++方法交叉使用,涉及c接口调用的模块,先将c接口封装为c++接口。
- C++代码格式规范引导(二):头文件
- C++代码格式规范引导(一):引言与代码布局
- UCF文件代码格式规范
- C++代码格式规范引导(三):命名空间
- C/C++代码头注释规范
- C语言头文件使用规范
- c/c++编码规范 - 头文件
- C/C++ 编程规范--头文件
- C语言头文件使用规范
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C/C++代码命名和格式规范
- C程序头文件注释格式
- C程序头文件注释格式
- c/c++文件头注释格式
- 白盒测试 [代码规范] [C++] 二
- 无法登陆ubuntu系统解决方法
- 求二叉树高度
- java初入多线程12
- php中传值赋值和引用赋值区别(传值和传引用的区别)
- Linux系统知识小结(七)
- C++代码格式规范引导(二):头文件
- 扩展程序无法拖进谷歌浏览器内的解决办法
- 楔子
- hihocoder #1042 跑马圈地
- 单链表
- IE和火狐的事件机制有什么区别?如何阻止冒泡?
- Python 1-- 模式
- Hibernater测试代码
- vuejs(5)