【发布时间】:2017-09-14 20:59:06
【问题描述】:
如果C 或CPP 程序需要使用我们自己的带有声明的头文件和带有定义的cpp 文件进行编译,我们需要在编译命令中包含带有定义的cpp 文件(参见this answer)。但是,当我们写#include <iostream>时,我们并没有像g++ main.cpp iostream.cpp -o main那样在编译语句中包含iostream.cpp。
如果我们编写自定义声明文件,例如带有类声明的hello.hpp和带有定义的hello.cpp,我们需要在main.cpp文件的标题中包含hello.hpp后使用g++ main.cpp hello.cpp -o main对其进行编译.这是为什么呢?
编辑:我们是否可以为我们的自定义头文件和 cpp 文件模仿标准模板库的行为,这样我们所要做的就是包含头文件和声明自动获取编译?如果是,那么如何?如果没有,为什么不呢?
【问题讨论】:
-
链接器自动链接到默认运行时库,该库包含标准头文件中的所有函数。
-
STL 是大量模板化的,因此大部分 STL 的源代码都在头文件本身中。对于预编译的 STL 部分而不是在标头本身中,您的开发环境可能有一个默认配置,可以在链接期间自动拉入必要的库。
-
“为什么?”为了方便起见。
-
相关(但不是完全重复的 IMO):stackoverflow.com/questions/25036467/…
-
@KerrekSB 来自wikipedia:运行时环境实现了编程语言的执行模型、内置函数和其他基本行为。 诸如
stdio和malloc是 C 运行时的一部分。