标头库是一个包含标题中所有代码的库。
如果我有两个cpp文件需要来自头文件库的代码,并且如果它们都导入头部,并且两者都被编译,那么头文件将被编译两次,我想。链接现在会抛出错误,因为头文件函数被定义了两次吗?如果不是错误,这仍然是不好的做法?
处理标头库的正确方法是什么?
答案 0 :(得分:1)
只需#include
您想要的任何地方。如果图书馆没有被严重破坏,它将正常工作。库本身负责提供使其可用的机制,如果只有标题库,这意味着通过包含标题使其可用。
没有什么可以做出这种不好的做法,只需使用包含就是只有标题库的目的。
答案 1 :(得分:0)
头文件将使用 include guards (Include Guard wiki)来保持库函数的定义两次。基本上,头文件将使用在编译期间评估的条件语句,该条件语句检查现有库定义。如果已定义,则忽略其他更多定义。这些警卫看起来像这样:
/* library_name.h */
#ifndef SOME_IDENTIFIER
#define SOME_IDENTIFIER
[function prototypes]
#endif
丹尼尔的计算机博客文章(Here)提供了一个非常可摘要的解释,说明幕后发生的事情,并清除了我没有解决的更多细微差别。
Baum mit Augen是对的。如果lib使用包含警卫,那么在你想要的任何地方使用#include<library_name>
都没有问题。
理想情况下,您将在使用库中函数/类/常量的任何文件的顶部使用#include<library_name>
一次。