导入使用仅标头库

时间:2015-03-09 00:00:20

标签: c++

标头库是一个包含标题中所有代码的库。

如果我有两个cpp文件需要来自头文件库的代码,并且如果它们都导入头部,并且两者都被编译,那么头文件将被编译两次,我想。链接现在会抛出错误,因为头文件函数被定义了两次吗?如果不是错误,这仍然是不好的做法?

处理标头库的正确方法是什么?

2 个答案:

答案 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>一次。