2013-10-16 58 views
-3

我对学习C++很感兴趣,对于多头文件的用途我很好奇。为什么你不能在一个头文件中包含所有东西?为什么你使用多个头文件?

+0

目前尚不清楚“一切”是什么意思。 –

+2

出于同样的原因,您不会将所有文件放在桌面上,或将所有电子邮件保留在收件箱 - 组织中。 –

回答

0

是的,你可以拥有一个头文件。然而,随着项目的增长,这个头文件很快就会变成一个难以维护且速度慢的混乱。

1

可以拥有在一个头文件中的一切。你甚至可以将你的整个程序放在一个文件中。

把事情分成不同的小文件的好处是你一次编译小部分,你只需要重新编译组件已经改变的那些部分。您还可以将通用代码放入单独的文件中,并使用单独项目中的这些文件,而无需在项目中复制粘贴代码。所以如果你发现一个bug,你可以修复一次,所有的项目都能从修复中受益。

2

为什么你不能只在一个头文件中包含所有东西?

如果您将所有内容都塞进单个标头,那么对该标头的每一次更改都将导致包含该标头的每个文件的重新编译。在你的情况下,这将是整个项目。

当您有很多小文件并且只有在绝对必要时才包含它们,管理项目会更容易。

3

关键字这里是模块化

模块化是可被分离并重新组合的系统的部件的程度。

正如其他人已经提到的那样,您可以在单个文件中编写程序。而且,你可以把它写在一行中。但是,你不这样做,因为单独的重新组合这个程序的一部分,如果它不编译就更不用说调试了。

1

标题存在组织。

对于一个非常简单的项目,一个头文件可以做得很好。你甚至可以根本不使用头文件,只需将所有内容写入单个文件。

但是,一旦你成长为一个更大的项目,其中包含并行系统,在多个上下文中使用的类或仅使用第三方库(如OpenSSL或MySQL),您不能简单地期望将所有代码放入具有数百万行代码的单个文件。

您可能还想知道为什么不在您的项目中将所有和任何必需的标题放在一个“common.h”中,然后在每个.cpp中输入#include

答案是,因为每个.cpp单独编译,所以,如果你限制了头部的每个.cpp只需要什么的话,你会同时降低所产生的.obj大小和编译时间。

此外,每次更改任何标题时,您都将被迫重新编译整个项目,而不是仅重新编译涉及的.cpp

0

除了已经发布的所有答案,你可能要考虑的是C++有哲学你付出你用什么或者相反,你不支付你不使用

如果我的应用需求,说,复数,然后我继续前进,#include此功能。如果我不需要它,那么为什么我的代码甚至应该意识到这样的概念存在,没有任何理由。

当我确定我保持一遍又一遍,包括相同的头文件对于给定类型的应用程序,我创建一个主头文件,其包括包括,我只是#include那一个。

例如:

// @file project.hpp 
// @brief provides all the functionality required by `project` 
#include<library1.hpp> 
#include<library2.hpp> 
#include<library3.hpp> 
// any type definitions go below this line 

,然后,在我的项目

boost
// @file project.cpp 
// @brief Implements `project` 
#include<project.hpp> 
// go ahead and implement project 

其他库通常提供一个“主”包括文件,例如使用如上所述的简化一个图书馆。

相关问题