是否应该链接带有实现的头文件?
Should an header file with implementations be linked?
我有一个包含实现的小标题。将其编译为对象并将其链接到其他源是否好?...如果它有模板功能怎么办?
标头的内容将在源文件中完全包含在源文件中,当它#include <yourheader>
并且代码将作为包含翻译单元的一部分进行编译。所以不,没有理由将标头编译为自己的目标文件/翻译单元(因此,没有理由显式链接它(。
将其编译为对象并将其链接到其他源是否好?
不,您永远不需要单独编译头文件。
如果这些包含函数实现,则可以标记这些static inline
以避免违反 ODR。否则,请考虑将实现分离到另一个翻译单元中。
。如果它有模板功能怎么办?
在这种情况下,您需要在头文件中提供实现。
这取决于你想要实现的目标。我曾经有一个嵌入式处理器的编译器,它不包含链接器。为了让我的代码分布在几个文件中,我不得不 #include.c文件。在这种情况下,使用 #ifndef FILENAME_C/#define FILENAME_C 保护以避免多次包含它仍然非常重要。
换句话说,对于编译器来说,某些代码是在 .h 还是 .c 文件中实现并不重要。它看到的只是预处理器的输出,你的工作是使用 #includes 来生成编译器理解的东西。
相关文章:
- 在实现文件中使用头文件的通用 lambda
- 在文件上实现迭代器
- C++头文件和类实现出现问题
- 在文件夹迭代上实现 RAII
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 用于 Windows 写入临时文件的 mkstemp() 实现
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- 在实现文件中使用模板参数声明方法
- 在头文件中使用opencv类型来实现未定义的标识符
- 模板实现文件中的匿名命名空间
- 创建单独的实现文件和头文件
- 多文件类实现Cpp
- Reader类实现中的文件读取错误
- MEX文件实现特征库伪内函数崩溃
- openssl rc4 命令行加密和 cpp 文件实现 rc4 之间的区别
- 从其他头文件实现结构
- c++头文件-实现-头文件-实现依赖链
- 内存映射文件实现