为什么发生在一个单独的目录标题? [重复](Why place headers in a sep

2019-08-04 08:58发布

这个问题已经在这里有一个答案:

  • 单独的“包括”和应用程序级代码“SRC”文件夹? [关闭] 10个答案

我知道,这是常见的C / C ++项目将页眉目录中的文件,如include和实施一个单独的目录,如src 。 我一直在玩弄不同的项目结构,我想知道是否有这方面的任何客观原因还是纯粹约定?

Answer 1:

公约的原因之一 - 大部分的时间,有效的抽象,你只关心接口,并希望有更容易只看标题。

这虽然不是唯一的原因。 如果你的项目模块组织,你极有可能包括在不同的模块的一些标题,并希望您的include目录中有被清洗的其他的“噪音”的文件。

另外,如果你打算重新分配你的模块,你可能想隐藏实现细节。 从一个单一的文件夹没有什么是简单else和分布集管 - 所以,你只提供头文件和二进制文件。

还有,我其实更喜欢的选择 -大众头在一个单独的文件夹中去(这包含最小的界面-没有实现细节可见任何),和私有头和执行文件是分开的(可能,但不一定是在单独的文件夹) 。



Answer 2:

我喜欢把它们到同一个目录。 原因:

接口规范文件(S),和实现该接口的源文件(S)所属的项目的同一部分。 假设你有subsystemx 。 然后,如果你把subsystemx文件在subsystemx目录, subsustemx自成体系。

如果有很多包含文件,确保您可以做subsystemx/includesubsystemx/source ,但我认为,如果你把定义class Foofoo.hppfoo.cpp你当然希望看到他们两人(或者至少在一个目录列表这样做很容易)在一起的可能性。 寻找到相关的所有文件foo

ls foo*

找到所有的实现文件:

ls *.cpp

查找所有申报文件:

ls *.hpp

简单干净。



Answer 3:

它使您的文件夹结构清洁。 头文件和源文件是明显不同的,并用于不同的东西,因此是很有意义将它们分开。 从这个角度的视图的问题基本上是一样的:“ 为什么你们的源文件和文档走在不同的文件夹 ”? 计算机是你放什么东西在文件夹和你做什么高度无关,文件夹 - 大部分 - 只是一个方便的抽象的,因为我们人类解析,专卖店的方式,和召回信息。

还有一个事实,即头文件中还是有益的,你已经建立后即如果你正在建设一个图书馆,有人想使用该库,他们需要的头文件-而不是源文件-所以它使捆绑这些头文件了-抓住的东西bin ,并在东西include和没有经过过筛src -容易得多。



Answer 4:

除了(?值得商榷)有用的东西保持有序,有用的其他项目等,其中有一个很中立,客观的优势:编译时间。

特别是,在一个大的项目有一大堆的文件,这取决于标题搜索路径(.C / .cpp文件使用#include "headername.h" ,而不是#include "../../gfx/misc/something/headername.h" ,并通过正确的参数编译器能够吞下)你大大减少了需要由编译器在搜索正确的头扫描的条目数。 由于大多数编译器编译每个文件单独启动,它们需要在文件中的包括路径上的列表读取,并寻求各编译的文件正确头。 如果有一堆.C,即.o和其他不相关的文件包括路径上,发现了包括其中需要按比例延长。



Answer 5:

总之,有几个原因:

  • 维护的代码。
  • 代码是精心设计和整齐。
  • 更快的编译时间(有时,对于小的改动完成)。
  • 该接口用于文档等的容易偏析
  • 可避免在编译时循环依赖。
  • 轻松浏览。

看看文章组织代码文件中C和C ++这也解释得很好。



文章来源: Why place headers in a separate directory? [duplicate]