【发布时间】:2020-10-24 15:16:25
【问题描述】:
我最近开始学习 makefile,我正在观看的视频包括两个源文件和一个头文件的编译。在头文件中定义了一个类,该类包含在两个源文件中。该类的方法在一个源文件中定义,并在第二个源文件(main.cpp)中调用。为什么我需要有 2 个源文件 (.c/.cpp)?
【问题讨论】:
-
你明白为什么你应该把代码分成标题和源代码吗?一旦你这样做了,你也会知道为什么你不想把所有东西都放在标题中。
-
@idclev463035818 你能解释一下为什么我应该把标题和源分开吗?据我了解,这是出于组织目的。
-
在预处理过程中将标头复制到源文件中。结果是一个输入编译器的庞大文件。如果一切都在标题中,那么每次您进行更改时,都会构建一个文件。它将包括项目的标头价值,并且一个更改会导致所有文件都被重新编译。这会非常耗时。
-
阅读How does the compilation/linking process work?。当你完成后,剩下的应该是有意义的。如果您有一个标识符多次存在,链接器将不知道它应该使用哪个标识符。如果您有两个带有
main的文件,这两个文件都会编译,但链接器无法选择使用哪一个。 -
将实际方法和函数实现放入头文件中,当目标文件链接在一起时,可能会存在相同方法或函数的多个实例。这可能会显着增加大型代码基线的编译时间,因为必须多次编译相同的函数或方法。如果使用这样的方案,如果函数或方法的多个实例可用,也可能会引发各种微妙的问题。
标签: c++ c makefile header-files