是否应该链接带有实现的头文件?

Should an header file with implementations be linked?

本文关键字:文件 实现 链接 是否      更新时间:2023-10-16

我有一个包含实现的小标题。将其编译为对象并将其链接到其他源是否好?...如果它有模板功能怎么办?

标头的内容将在源文件中完全包含在源文件中,当它#include <yourheader>并且代码将作为包含翻译单元的一部分进行编译。所以不,没有理由将标头编译为自己的目标文件/翻译单元(因此,没有理由显式链接它(。

将其编译为对象并将其链接到其他源是否好?

不,您永远不需要单独编译头文件。

如果这些包含函数实现,则可以标记这些static inline以避免违反 ODR。否则,请考虑将实现分离到另一个翻译单元中。

。如果它有模板功能怎么办?

在这种情况下,您需要在头文件中提供实现。

这取决于你想要实现的目标。我曾经有一个嵌入式处理器的编译器,它不包含链接器。为了让我的代码分布在几个文件中,我不得不 #include.c文件。在这种情况下,使用 #ifndef FILENAME_C/#define FILENAME_C 保护以避免多次包含它仍然非常重要。

换句话说,对于编译器来说,某些代码是在 .h 还是 .c 文件中实现并不重要。它看到的只是预处理器的输出,你的工作是使用 #includes 来生成编译器理解的东西。