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

时间:2017-08-13 15:30:18

标签: c++ header

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

  

将它编译为对象并将其链接到其他来源是否合适?

不,你不应该单独编译头文件。

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

  

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

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

答案 2 :(得分:0)

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

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