c ++是否可以将所有头文件放在cpp文件中

时间:2017-01-15 09:28:44

标签: c++

如果.cpp文件加载了应用程序所需的所有头文件而不是在主源文件中预先加载它,那么它是否可以在大型程序中进行优化?

喜欢而不是拥有 Main.cpp的

#include <header.h>
#include <header1.h>
#include <header2.h>
#include <header3.h>
//main code

我可以只有一个.cpp文件来执行此操作并只在main.cpp中加载.cpp文件吗?喜欢这个

Loader.cpp

#include <header.h>
#include <header1.h>
#include <header2.h>
#include <header3.h>

Main.cpp的

#include "Loader.cpp"
//main code

3 个答案:

答案 0 :(得分:6)

预处理只会生成要编译的文本。您的建议会导致相同的源代码,因此它对优化没有影响。

一直包括所有标题(称之为&#34;超标题&#34;)可能导致编译速度慢。

但是,预编译头是一种流行的解决方案,可以让这些超级标头快速工作。您可以查看IDE或编译器的文档,以了解其预编译的头文件工具。

在任何情况下,通常超级标题仍以.h命名;因为它没有实现任何.cpp名称是不合适的。

答案 1 :(得分:0)

你可以,但你可能想重新考虑。

您可能无意中尝试自行编译Loader.cpp,因为您已将其命名为源文件。由于您将其用作标题 - 并且它是多个标题的串联 - 根据约定命名它并使用.h文件扩展名。

  

是否可以优化

它对编译的程序没有任何影响,因此在这种意义上,优化是无关紧要的。

然而,这会带来编译速度的问题。而这些问题并没有“可以优化”#34;将每个标头复制到源文件中 - 需要与否 - 减慢编译源文件所需的时间(以及减速与硬盘驱动器速度的关系)。更大的问题是它阻止了增量构建,因为任何头文件的更改都会强制重新编译源文件,因为它的内容会发生变化。

假设您打算使用这种&#34;技术&#34;这些问题在多个源文件中复杂化。包含您拥有的所有源文件。必须在修改任何标题时重新编译整个项目对于任何非常小的项目来说通常是不可接受的。

答案 2 :(得分:0)

这实际上取决于编译器。 Visual Studio有一个名为stdafx.h的东西。

What's the use for "stdafx.h" in Visual Studio?