我是学习c ++的新手,我很好奇多个头文件的用途是什么。为什么你不能把所有东西放在一个头文件中?
答案 0 :(得分:3)
此处的关键字是 modularity :
模块性是系统组件可以分离和重新组合的程度。
正如其他人已经提到的,您可以在一个文件中编写程序。而且,您可以将它写在一行中。但是,你不这样做是因为那么分离和重新组合这个程序的部分真的很难,更不用说如果它不编译就调试它。 / p>
答案 1 :(得分:2)
为什么不能将所有内容放在一个头文件中?
如果将所有内容都塞入单个标头中,则对该标头的每次更改都将导致重新编译包含该标头的每个文件。在你的情况下,这将是整个项目。
当您拥有许多小文件时,管理项目会更容易,只有在绝对必要时才包含它们。
答案 2 :(得分:1)
你可以将所有内容都包含在一个头文件中。您甚至可以将整个程序放在一个文件中。
将东西分成不同的小文件的好处是,您可以一次编译小部件,并且只需要重新编译其组件已更改的部件。您还可以将公共代码放入单独的文件中,并使用来自不同项目的文件,而无需跨项目复制粘贴代码。因此,如果您发现了一个错误,您可以修复一次,所有项目都可以从修复中受益。
答案 3 :(得分:1)
存在标题以进行整理。
对于一个非常简单的项目,一个头文件就可以了。你甚至根本不能使用标题,只需将所有内容写在一个文件中即可。
但是一旦你成长为一个更大的并行系统项目,在多个上下文中使用的类,或者只是使用第三方库,如OpenSSL或MySQL,你不能简单地期望将所有这些代码放在一个单独的工作中包含数百万行代码的文件。
您可能还想知道为什么不将项目中的所有和任何必需的标题放在单个“common.h”中,然后#include
将其放在每个.cpp
中。
答案是因为每个.cpp
都是单独编译的,因此如果您将每个.cpp
的标题限制为仅需要的标题,那么您将减少生成的.obj
大小和编译时间。
此外,每次对任何标题进行更改时,您都将被迫重新编译整个项目,而不是仅重新编译所涉及的.cpp
。
答案 4 :(得分:0)
是的,您可以在一个头文件中包含所有内容。但是,随着项目的增长,该头文件将很快成为一个难以维护且速度慢的编译混乱。
答案 5 :(得分:0)
除了已发布的所有答案之外,您可能还需要考虑C ++的哲学是您支付的费用,或者相反,您不支付的费用你不使用。
如果我的应用程序需要复杂的数字,那么我继续#include
这个功能。如果我不需要它,那么为什么我的代码甚至应该意识到存在这样的概念是没有理由的。
当我确定为给定类型的应用程序反复包含相同的头文件时,我创建了一个主头文件,包含了包含,我只是{{1} } 那个。
例如:
#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
// @file project.cpp
// @brief Implements `project`
#include<project.hpp>
// go ahead and implement project
等其他库通常会提供一个“主”包含文件,例如上面描述的文件,以简化库的使用。