构建一个可执行文件,如果是单个 cpp 文件

Building an executable out if a single cpp file

本文关键字:如果 单个 cpp 文件 可执行文件 一个 构建      更新时间:2023-10-16

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

如果我理解正确,它的含义只会影响构建过程,即编译和链接,而不会影响运行时性能。是真的吗?

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

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

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

因此,一个翻译单元的编译或多或少是相同的。除了多重定义之外,问题在于,当头文件被修改时,包含它的所有其他文件都必须重新编译。如果它是一个广泛使用的标头,这可能需要一段时间。另一方面,如果修改了.cpp文件,则只会重新编译它。

由于预处理器基本上执行文本操作,因此可执行文件应该是相同的。

相关文章: