如果单个cpp文件,则生成可执行文件

时间:2019-04-21 22:28:26

标签: c++

我知道有类似的帖子,但是我觉得我的问题足够具体,仍然可以问他们。 假设我选择通过将实际定义放在头文件中,然后将它们全部包含在单个cpp文件中来构建可执行文件。

如果我理解正确,那将仅影响构建过程,即编译和链接,而对运行时性能没有影响。是真的吗?

此外,编译时间应该更长,而链接时间应该更少。那不是吗?如果不是这样,那么增加编译时间的确是没有人构建这样的应用程序的唯一原因吗?

1 个答案:

答案 0 :(得分:1)

编译过程的简短TL; DR。编译器首先运行执行预处理器指令的预处理器(即,开头带有哈希的行,例如include)。

include指令只是将文件的内容复制到另一个文件中。因此,在包含文件(通常是头文件)中移动内容在这方面不会有太大变化。我们只是简单地取出定义,因为每个翻译单元(在预处理程序运行后,将其视为.cpp,并插入了包含的文件)必须对每个事物只有一个定义。标头中包含定义,因此很难避免。

因此,一个转换单元的编译大致相同。除了多重定义之外,问题还在于,修改标头时,必须重新编译所有包含该标头的文件。如果它是广泛使用的标头,则可能需要一段时间。另一方面,如果修改了.cpp文件,则仅重新编译它。

由于预处理程序基本上会执行文本操作,因此可执行文件应该相同。