将所有项目标题放入一个文件HEADERS.h是一个好主意吗?

时间:2009-11-20 03:06:38

标签: c++ header

前几天我和我的导师谈过,并问他这个问题。他告诉我,我可以选择较小的项目,但我正在开始一个国际象棋程序,我想知道Stack Overflow对这个问题的看法。我应该将所有标题包含在一个文件中,还是将它们分开?

7 个答案:

答案 0 :(得分:13)

通常,您需要单独的标题。

包括超过必要的一些可能有些坏事。

  1. 这是编译时间慢的唯一原因。不必要的额外标题包含会降低编译速度,因为每个源文件都需要担心所需的信息量超出需求。它起初是一个小问题,在您知道之前,数百名开发人员每个人都在浪费几十到几百个小时,因为问题太过于难以解决。即使你正在处理小问题,理解标题的正确分离也很重要 - 第一次很容易正确,但如果忽略它就很难修复。

  2. 您失去了正确处理依赖关系的能力(取决于编译器/ IDE),并最终构建了比您需要构建的信息更多的信息。

  3. 您失去了可维护性。当你拥有大型的单个文件时,维护软件比使用大量小巧简洁的文件更难。

  4. 您使代码更难理解,因此更容易出错。通过将所有内容放在一个文件中,可以更容易地在巨大的标题中“丢失”。

答案 1 :(得分:2)

有些时候这种做法很有用:

  1. 预编译的头文件,代码实际上并没有经常改变。

  2. 的API

答案 2 :(得分:0)

一般来说这是一个坏主意,因为你可以拥有在这种情况下你无法解决的依赖。

但通常最好创建一个头文件,其中包含您从不同库或您自己的头文件中使用的所有基本头文件(带有结构和数据类型定义)。

答案 3 :(得分:0)

没有单向适合的解决方案。安排你的标题如何最有意义。 90%以上的时间,这意味着每个模块仅包含所需的标头。但是,有些程序几乎没有对模块之间的数据结构进行隔离 - 这可能意味着可以使用

#include "alltheheaders.h"

答案 4 :(得分:0)

对于较小的项目,您永远不会注意到差异。但是,一旦您的项目达到了显着的规模,请遵循旧的格言“仅在直接使用它们的文件中引用标题”。如果你有myclass.cpp和myclass.h,并且myclass.h不直接需要特定的头文件,请在cpp中引用它。

这可能需要更多时间,但最佳做法总是值得的。

答案 5 :(得分:0)

我只想补充一点,是的,这通常是一个坏主意,但它偶尔会有用。但是从来没有为整个项目。

例如,我最近编写了一个实用程序来在Windows上执行堆栈转储。我将要包含4个常见标题,因此我(在detail文件夹中创建了一个约会我偷了形式提升使用)windows.hpp,其中包括那四个。然后,实现可以使用该标头轻松获得必要的功能。

虽然它可能没有与mega-includes-480-header标头相同的重量,但它一组常见标头的组合,它非常有用。这里的关键是它是一小部分相关的标题,用于代码的一部分。

答案 6 :(得分:0)

您应该将任何源(* .cpp,* .cc等)文件中包含的标头数量保持为编译该文件所需的最小数量。包括额外的标头会增加编译时间。您还应该尝试减少标题中包含的数量 - 您可以通过转发声明类而不是包含标题来实现此目的。

e.g。以下代码在标题

中包含不必要的包含

Example.hh

#include "SomeClass.hh"

void SomeFunction(SomeClass const& obj);

Example.cc

#include "Example.hh"

void SomeFunction(SomeClass const& obj)
{
   // code here
}

可以将include从头文件移动到源文件

Example.hh

class SomeClass;

void SomeFunction(SomeClass const& obj);

Example.cc

#include "Example.hh"
#include "SomeClass.hh"

void SomeFunction(SomeClass const& obj)
{
   // code here
}